PHP / [Из песочницы] Picasaweb API Авторизация. Получаем постоянный токен

в 11:27, , рубрики: Новости

Предлагаю вашему вниманию скрипт регистрации на вебсервисе picasaweb.
API этого вебсервиса — довольно мощный и является хорошим помошником для фотографов и разработчиков.
На сегодня есть масса различных библиотек для работы с API picasaweb. Но что делать, если мне нужно использовать лишь незначительную часть возможностей этого сервиса? Можно использовать существующие библиотеки (не смотря на их грамоздкость), переделывать их под себя или написать свой велосипед. Я сторонник своих двухколесных решений.
Скрипт элементарен, но потребует подлючения библиотеки curl. Надеюсь таковая у вас установлена и активирована, а иначе нам удачи не видать.
<a rel="nofollow" name="habracut">

Итак сам скрипт:

<?php // Получаем временный токен  $secure     = 0;   $session    = 1;   $scope      = "http://picasaweb.google.com/data/";   $next       = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];  $temp = @$_GET['token'];  if(!$temp) {     echo "<h2><a href="https://www.google.com/accounts/AuthSubRequest?scope=$scope&session=$session&secure=$secure&next=$next">             Получить токен           </a></h2>"; } else {     // Меняем временный токен на постоянный     $token = upgradeToken($temp);     if ($token) {         echo "  <h4>Временный токен: $temp </h4>                 <h4>Постоянный токен: $token </h4>                 <a href="view.php">Посмотреть пример</a>";     } }  function upgradeToken($temp) {       $ch = curl_init("https://www.google.com/accounts/AuthSubSessionToken");       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);       curl_setopt($ch, CURLOPT_FAILONERROR, true);       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);       curl_setopt($ch, CURLOPT_HTTPHEADER, array(       'Authorization: AuthSub token="' . trim($temp) . '"'       ));            $result = curl_exec($ch);       curl_close($ch);       $splitStr = split("=", $result);     return trim($splitStr[1]);   } ?> 

Напомню, что для получения токена нам нужно отправить запрос на гугловский сервер со своими данными, перейти по разрешающей ссылке подтверждающей намерение, и полученный из ответа гет параметр — токен (временный), обменять на постоянный, отправив еще один запрос курлом.

Этого будет достаточно, чтобы получить постоянный токен.

Дальше наши руки развязаны. Теперь, имея этот токен и свой аккаунт на этом сервисе, мы можем, к примеру, вывести фотографии альбома.

Демонстрашка.

И если интересно, скрипт самой демонстрашки:

<html> <head> 	<title>Picasaweb auth</title>     <style>         body {             background: none repeat scroll 0 0 #333333;         }         h1 {             color: #FFFFFF;             font-family: arial,verdana,tahoma,georgia;             font-size: 27px;             font-weight: normal;             text-align: center;         }         a span {             color: #FFFFFF;             display: block;             text-align: center;         }         div {             margin: 0 auto;             width: 1000px;         }         img {             border: 1px solid #FFFFFF;             height: 150px;         }     </style> </head> <body>     <h1>Альбом фотографий</h1>     <div> 

        <?php             // Здесь я использовал свои id пользователя и альбома, вам нужно будет использовать свои             $user       = '108610163479261934253';             $album_id   = '5715645011798556705';             $url        = "http://picasaweb.google.com/data/feed/base/user/$user/albumid/$album_id?alt=rss&kind=photo&hl=en";             $key        = '1/6GJoq6_b0D2Y8YBsUJ3y0vGWPgxDb9GshCS7iuSpqhE';             $ch         = curl_init();                      	curl_setopt($ch, CURLOPT_URL, $url);         	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);         	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);         	curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: AuthSub token="'.$key.'"'));         	$response = curl_exec($ch);         	curl_close($ch);                      	$xml = new SimpleXMLElement($response);                  ?>                  <?php foreach($xml->channel->item as $i): ?>             <?php preg_match_all('#src="http://(.*)"#SUsi', $i->description, $min); ?>             <a href="<?=$i->enclosure['url']; ?>?size=640" target="_blank">                 <img src="http://<?=$min[1][0]; ?>" />             </a>         <?php endforeach; ?> 

    </div> </body> </html> 

$user, $album_id и $key (постоянный токен) я подставил свои. У вас они будут — свои.

Не сем все. Спасибо за внимание.

Автор: frentsel

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js