2010-11-10 3 views
0

J'ai vraiment du mal à trouver un moyen d'authentifier un utilisateur et d'ajouter un signet à son délicieux compte rendu. J'ai téléchargé Yahoo's YOS Social SDK puis j'ai commencé à modifier le code sampleapp.php. Il gère essentiellement le processus oAuth en créant un lien de connexion qui vous envoie à Yahoo pour accorder l'autorisation, puis vous renvoie à l'URL de rappel que vous spécifiez.Delicious PHP oAuth Yahoo SDK Ajouter un signet

Ma pensée était de modifier le fichier sampleapp.php pour faire une demande à posts/add API délicieux pour ajouter un nouveau signet une fois que le processus oAuth est terminé, mais je rencontre des problèmes. Je pense que je gère la demande POST de la mauvaise manière.

Voici mon code:

<?php 

require dirname(__FILE__).'/lib/Yahoo.inc'; 

error_reporting(E_ALL | E_NOTICE); 
ini_set('display_errors', true); 
YahooLogger::setDebug(true); 
YahooLogger::setDebugDestination('LOG'); 

ini_set('session.save_handler', 'files'); 
session_save_path('/tmp/'); 
session_start(); 

define('OAUTH_CONSUMER_KEY', '<YOURS_GOES_HERE>'); 
define('OAUTH_CONSUMER_SECRET', '<YOURS_GOES_HERE>'); 
define('OAUTH_DOMAIN', '<YOURS_GOES_HERE>'); 
define('OAUTH_APP_ID', '<YOURS_GOES_HERE>'); 

if(array_key_exists("logout", $_GET)) { 
    YahooSession::clearSession(); 
    header("Location: sampleapp.php"); 
} 

$hasSession = YahooSession::hasSession(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, OAUTH_APP_ID); 

if($hasSession == FALSE) { 

    $callback = YahooUtil::current_url(); 
    $auth_url = YahooSession::createAuthorizationUrl(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, $callback); 

} 
else { 

    $session = YahooSession::requireSession(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, OAUTH_APP_ID); 

    if($session) { 

    $consumer = new stdclass(); 
     $consumer->key = OAUTH_CONSUMER_KEY; 
     $consumer->secret = OAUTH_CONSUMER_SECRET; 

    $nativeSession = new NativeSessionStore(); 
    $token = $nativeSession->fetchAccessToken(); 

    $client = new OAuthClient($consumer, $token, OAUTH_PARAMS_IN_HEADERS, OAUTH_SIGNATURE_HMAC_SHA1); 

    $request_url = 'http://api.del.icio.us/v2/posts/add'; 
    $bookmark_url = 'http://www.tegdesign.com'; 
    $parameters = array("url" => urlencode($bookmark_url), "description" => "test"); 

    $response = $client->post($request_url,'TEXT',$parameters); 

    echo '<pre>'; 
    print_r($response); 
    echo '</pre>'; 

    } 

} 


if($hasSession == FALSE) { 

    echo sprintf("<a href=\"%s\" id=\"yloginLink\">Login</a>\n", $auth_url); 

} else if($hasSession) { 

    echo "<p><a href=\"?logout\">Logout</a></p>"; 

} 

?> 

Et est ici la sortie de la variable de réponse $:

Array 
(
    [method] => POST 
    [url] => http://api.del.icio.us/v2/posts/add 
    [code] => 401 
    [requestHeaders] => Array 
     (
      [0] => Accept: application/json 
      [1] => Authorization: OAuth realm="yahooapis.com",oauth_version="1.0",oauth_nonce="<MINE_SHOWS_HERE>",oauth_timestamp="1289407587",oauth_consumer_key="<MINE_SHOWS_HERE>",oauth_token="<MINE_SHOWS_HERE>",oauth_signature_method="HMAC-SHA1",oauth_signature="<MINE_SHOWS_HERE>" 
      [2] => Content-Type: TEXT 
     ) 

    [requestBody] => Array 
     (
      [url] => http%3A%2F%2Fwww.tegdesign.com 
      [description] => test 
     ) 

    [responseHeaders] => Array 
     (
      [Date] => Wed, 10 Nov 2010 16:46:32 GMT 
      [WWW-Authenticate] => OAuth oauth_problem="signature_invalid", realm="yahooapis.com" 
      [Content-Type] => application/json 
      [Cache-Control] => private 
      [Age] => 0 
      [Transfer-Encoding] => chunked 
      [Connection] => keep-alive 
      [Server] => YTS/1.17.21 
     ) 

    [responseBody] => {"error":{"lang":"en-US","description":"Please provide valid credentials"}} 
) 

Est-ce que quelqu'un a des connaissances sur l'utilisation de délicieuses nouvelles API pour authentifier et poster un signet sur au nom d'un utilisateur? Je passe un moment terrible.

Merci, Tegan

Répondre

1

Définir votre type de contenu à "application/x-www-form-urlencoded" au lieu de 'Text' sur la ligne ci-dessous.

$response = $client->post($request_url,'TEXT',$parameters); 
Questions connexes