2009年10月24日 星期六

Wretch 無名小站 API - Yahoo! Developer

@2010/01/01 新增一篇更完整的教學:Wretch 無名小站 API - 申請、使用完整教學


記得以前寫過模擬瀏覽器的程式,像是模擬使用者登入、發表文章等程式,現在,終於不必再如此偷偷摸摸了!如果無名能夠再提供 XML-RPC 那就更好了!(好像也可以自己寫了?),先來測試一下無名小站 API 吧!參考資料如下:



至於要怎樣才能使用,我覺得比一般還麻煩一點點 :P



  1. 申請 API 使用權


    • 連到網站上,填寫一些資訊即可

      • Kind of Application : Web-based

      • Application URL :  你家程式想跑的位置

      • Application Domain : 這比較麻煩,似乎不能帶 port 資訊

      • Access Scopes : 記得要選無名小站 Wretch 的 Read/Write 啦



    • 之後就會要確認 Application Domain ,要在網站根目錄擺在特定的檔名供 Yahoo 認證。

    • 如果蹦出 Domain Verification Failed 訊息

      • There was an internal error while an application is being created. Please try again.

      • 如果你沒用網域只有 IP 的話,請先申請個 Domain 吧!例如 http://tw.twbbs.org 可免費申請,一開始我懶的弄,僅用 IP 位置,結果在這邊卡關就不玩了 :P 幾天後我終於去申請網域後再 Try 成功囉





  2. 下載 PHP Library


  3. 測試 PHP 程式

    • 需要支持 curl 喔 (其實hack也是用這個lib寫的 XD)


      • sudo apt-get install php5-curl (Ubuntu安裝法)



    • <?php  
          require("Yahoo.inc");  

          // Your Consumer Key (API Key) goes here.  
          define('CONSUMER_KEY', "");  

          // Your Consumer Secret goes here.  
          define('CONSUMER_SECRET', "");  

          // Your application ID goes here.  
          define('APPID', "");  

          $session = YahooSession::requireSession(CONSUMER_KEY,CONSUMER_SECRET,APPID);  
      ?>

    • 將上述的相對位置弄一弄後,連過去就會將你導去 Yahoo 登入畫面,登入完就回到你的程式了

      • 登入者會收到 Yahoo 寄來的信件,其標題類似於"你的 Yahoo! 帳戶現已與 xxx 連結",也可以再解除設定,就像在 facebook 上玩遊戲時的情況一樣,不想用可以再拿掉。






以上都搞定了,那代表可以真的開始寫程式囉!以下是一些小小的讀取範例!程式如下(別忘了加上上述測試Session的程式碼):


<?php

$yahoo_user = $session->getSessionedUser();

// Profile
$url = 'http://wretch.yahooapis.com/v1/profileService/'.$yahoo_user->guid;
//$response = $session->client->get($url);
//print_r($response);

// Albums
$url = 'http://wretch.yahooapis.com/v1/albumService/'.$yahoo_user->guid.'/albums';
//$response = $session->client->get($url);
//print_r($response);

// Blog
$url = 'http://wretch.yahooapis.com/v1/blogService/'.$yahoo_user->guid.'/articles';
$response = $session->client->get($url);

print_r($response);


?>


寫入範例,建立相簿。但很奇怪地建出來都沒照我想要名字或敘述?比較想試的其實是發表文章至無名小站,但測試的結果都是錯誤訊息?改天有空再玩玩吧。經由 GTStudy 提醒,在 POST  的 contentType 設定成 "application/xml" 就可以成功建立相簿囉!我也順道找了一下投影片,裡頭的敘述果真詳細了一點,第 18 頁的確有看到這個關鍵字,十分感謝!


<?php

$yahoo_user = $session->getSessionedUser();

$url = 'http://wretch.yahooapis.com/v1/albumService/'.$yahoo_user->guid.'/albums';

$content = <<<multi_line_end
<?xml version="1.0" encoding="utf-8"?>
<req>
  <title>My title</title>
  <desc>My desc</desc>
</req>
multi_line_end;

//$content = simplexml_load_string($content);

$request = Array (
        'class_id' => 1
);
$url .= '?'.http_build_query( $request );

$contentType = 'application/xml';
$response = $session->client->post( $url , $contentType , $content );

print_r( $response );
?>


雖然無名小站正式提供不錯的 API ,但我覺得能提供如 MetaWeblog API 將會是更好的服務,但也許是綁著 Yahoo 帳號的關係,在管控上已經不能簡單化。更多 API 細節請至 Wretch API 文件 查看。


6 則留言:

  1. 你好:我今天看了你的文章跟yahoo的文件試了很久,
    但sdk安裝就是沒辦法成功,想請問你是裝在哪個資料夾下?
    如何取得session資訊?
    我的require_once一直抓不到yahoo.ini,
    但是裝在同一層雖沒有錯誤訊息,但也連結不到你說安裝成功的yahoo登入畫面

    版主回覆:(11/12/2010 12:13:26 AM)


    記得先確定 yahoo.ini 在的位置啊, 預設解壓縮出來是在 yahoo-yos-social-php-2a05061/lib/Yahoo.inc, 位置要設定對

    ex:

    require( 'yahoo-yos-social-php-2a05061/lib/Yahoo.inc' );

    回覆刪除
  2. 不好意思,我的問題應該是說位置設定對了,且也已安裝curl,但是在執行該檔案時,沒有任何錯誤訊息,但是也沒有連結到yahoo的登入頁面,但我不知道究竟是哪裡出錯?好像是session沒有啟動執行?

    版主回覆:(11/15/2009 04:25:16 AM)


    真抱歉, 我看成 require( 'Yahoo.inc' ) 失敗 XD

    請參考這篇 http://changyy.pixnet.net/blog/post/25594736

    回覆刪除
  3. 先謝謝你~經過幾天的安裝跟測試
    我發現好像是ssl ca cert認證問題,不知道你之前實作是否有通過什麼curl 認證?


    版主回覆:(01/01/2010 02:41:47 PM)


    我之前的確都沒碰到認證問題, 但這幾天測試時有發現(at Windows)
    請參考這篇 http://changyy.pixnet.net/blog/post/25594736

    回覆刪除
  4. hi, 我也一直不能成功建立相簿或發文,不知道您是否成功了?可以分享一下嗎QQ
    pioneerlike AT gmail.com

    版主回覆:(01/03/2010 02:13:10 PM)


    <?php
    require("yahoo-yos-social-php-12c4a50/lib/Yahoo.inc");
    // Your Consumer Key (API Key) goes here.
    define('CONSUMER_KEY', "######");
    // Your Consumer Secret goes here.
    define('CONSUMER_SECRET', "######");
    // Your application ID goes here.
    define('APPID', "######");

    //$GLOBAL_YAHOO_LOGGER_DEBUG = true;
    //$GLOBAL_YAHOO_LOGGER_DEBUG_DESTINATION = "CONSOLE";

    $session = YahooSession::requireSession( CONSUMER_KEY, CONSUMER_SECRET );
    $yahoo_user = $session->getSessionedUser();

    $url = 'http://wretch.yahooapis.com/v1/albumService/'.$yahoo_user->guid.'/albums';

    $content = <<<_multi_line_
    <?xml version="1.0" encoding="utf-8"?>
    <req>
    <title>test 123</title>
    <desc>123</desc>
    </req>
    _multi_line_;

    $request = Array (
    'class_id' => 1 ,
    );
    $url .= '?'.http_build_query( $request );
    //$content = simplexml_load_string($content);
    $contentType = 'application/xml';
    $response = $session->client->post( $url , $contentType , $content );

    print_r( $response );
    ?>

    回覆刪除
  5. 我也是看不懂『必須以 "XML的格式" 帶在 "Content" 中』的意思=(

    感謝您的回覆囉=p

    如果試成功我也會回來分享的^_^"

    版主回覆:(01/19/2010 08:54:25 AM)


    感謝感謝,祝你成功啦 :D

    回覆刪除
  6. 你好:
    請問你知道如何從一個無名id得知這個人的guid嗎?
    謝謝

    版主回覆:(01/04/2010 11:25:37 AM)


    抱歉, 這有一陣子沒在用這啦, 不太清楚囉

    回覆刪除