WebWost WebWostbeta

Авторизация через lastfm

Скрипт авторизации через lastFM для вашего сайта.

PHP

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.

Ну вот и всё) Спасибо за внимание :)

0 комментариев

Новый комментарий