Pull to refresh

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

Reading time3 min
Views1.2K
Предлагаю вашему вниманию скрипт регистрации на вебсервисе picasaweb.
API этого вебсервиса — довольно мощный, и является хорошим помощником для фотографов и разработчиков.
На сегодняшний день есть масса различных библиотек для работы с API picasaweb. Но что делать, если мне нужно использовать лишь незначительную часть возможностей этого сервиса? Можно использовать существующие библиотеки (несмотря на их громоздкость), переделывать их под себя или написать свой велосипед. Я сторонник своих двухколесных решений.
Скрипт элементарен, но потребует подлючения библиотеки curl. Надеюсь, таковая у вас установлена и активирована, а иначе нам удачи не видать.

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

<?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('#src\=\"http:\/\/(.*)\"#SUsi', $i->description, $min); ?>
            <a href="<?=$i->enclosure['url']; ?>?size=640" target="_blank">
                <img src="http://<?=$min[1]; ?>" />
            </a>
        <?php endforeach; ?>

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



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

На этом все. Спасибо за внимание.
Tags:
Hubs:
Total votes 14: ↑10 and ↓4+6
Comments0

Articles