
Авторизация через lastfm
Скрипт авторизации через lastFM для вашего сайта.
Al-Sher
Сегодня я решил продолжить работу над авторизациями через соц сети :)
Весь код можно найти тут.
Для начала нужно получить необходимые данные, сделать это можно тут тут.
Теперь, как и в прошлый раз, я разберу весь код :)
Ну как обычно мы создаем массив для необходимых данных
$lfm=array('key'=>'Ключ','secret'=>'Секретный_ключ','redirect'=>'Страница_редиректа?state=lfm');
Теперь самое время создать ссылку для авторизации:
$link='<a href="http://www.last.fm/api/auth/?api_key='.$lfm[" key="">Аутентификация через LastFM</a>';
echo $link;
Проверяем пришел ли необходимый для нас код и правда ли мы пришли от lastfm:
if(isset($_GET["token"]) and isset($_GET["state"]) and @$_GET["state"]=='lfm') {
Если всё хорошо, то получаем токен и создаем хеш необходимых нам данных:
$token=$_GET["token"];
$key=md5("api_key".$lfm["key"]."methodauth.getSessiontoken".$_GET["token"].$lfm["secret"]);
Теперь пишем простой пост запрос:
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://ws.audioscrobbler.com/2.0/?method=auth.getSession");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, "api_key=".urldecode($lfm["key"])."&token=".urldecode($_GET["token"])."&api_sig=".urldecode($key));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($curl);
curl_close($curl);
Так как получаемый ответ написан в xml формате нам необходимо разобрать строку и получить ник пользователя:
$p = xml_parser_create();
xml_parse_into_struct($p, $result, $result);
xml_parser_free($p);
Создаем переменную с ником пользователя:
$user=$result[2]["value"];
Ну и последний наш шаг - получение информации о пользователе:
$userInfo=json_decode(file_get_contents("http://ws.audioscrobbler.com/2.0/?method=user.getinfo&user=".$user."&api_key=".$lfm["key"]."&format=json"));
Переменная userInfo имеет структуру объекта, а не массива, а значит нужно обращаться к данным примерно так: $userInfo->id.
Ну вот и всё) Спасибо за внимание :)