2009年12月5日 星期六

[PHP] Official Plurk API 之 PHP - cURL 使用教學

Plurk 一陣子,官方終於將 Plurk API 弄出來囉,如此有更統一的 API 來把玩,最棒的是不必擔心用的 Unofficial Plurk API 會不會哪一天掛掉,當然並不是說官方的就不會更改 API 架構,只是換個角度想,API 的維護交給官方,讓製作 Plurk 架構的人處理,比自行摸索要來的更有效率。(...突然回想起當初去hack某家網誌發文的辛苦歷程...)


Plurk API 上有 Java 跟 Python 的範例程式,但竟然沒有我最擅長使用的 PHP 。所以,就來試試 PHP 吧!



  1. 申請 Plurk API Key

    • 幾乎大家都用 API Key 的方式管理,申請方式就只要在上述網頁 Get an API key 中,填寫 "What are you planning to make?" & "Your full name" & "Your email" ,最重要的就是 "Your email" 啦,因為 API Key 會用寄信的方信寄到指定的信箱,而其他兩個資料,我想只是一種統計吧?



  2. 由於一些動作都是要使用 HTTP 甚至 HTTPS 進行溝通,在 PHP 上滿建議使用 cURL 函數,先建一個小function吧。

    • function do_act( $target_url , $type , $data , $cookie_file = NULL )
      {
              $ch = curl_init();

              if( $type == 'GET' )    // GET
              {

                      $target_url .= http_build_query( $data );
                      curl_setopt($ch, CURLOPT_URL, $target_url );

              }
              else                    // POST
              {
                      curl_setopt( $ch , CURLOPT_URL , $target_url );
                      curl_setopt( $ch , CURLOPT_POST , true );
                      curl_setopt( $ch , CURLOPT_POSTFIELDS , http_build_query( $data ) );
              }

              if( isset( $cookie_file ) )     // cookie
              {
                      curl_setopt( $ch , CURLOPT_COOKIEFILE , $cookie_file );
                      curl_setopt( $ch , CURLOPT_COOKIEJAR , $cookie_file );
              }

              curl_setopt( $ch , CURLOPT_RETURNTRANSFER , true );
              //curl_setopt( $ch , CURLOPT_FOLLOWLOCATION , true );
              //curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER , false );

              $result = curl_exec( $ch );
              curl_close( $ch );
              return $result;
      }



  3. 連續範例動作

    • // Users/login
      print_r(
              do_act(
                      'http://www.plurk.com/API/Users/login' ,
                      'POST' ,
                      array(
                              'api_key'       => 'Your_Plurk_API_Key' ,
                              'username'      => 'Your_Account' ,
                              'password'      => 'Your_Password'
                      ) ,
                      '/tmp/plurk_cookie'
              )
      );

      echo "\n\n";

      // Timeline/getPlurks
      print_r(
              do_act(
                      'http://www.plurk.com/API/Timeline/getPlurks' ,
                      'POST' ,
                      array(
                              'api_key'       => 'Your_Plurk_API_Key' ,
                              'offset'        => '2009-6-20T21:55:34'
                      ) ,
                      '/tmp/plurk_cookie'
              )
      );

      echo "\n\n";

      // Timeline/plurkAdd
      print_r(
              do_act(
                      'http://www.plurk.com/API/Timeline/plurkAdd' ,
                      'POST' ,
                      array(
                              'api_key'       => 'Your_Plurk_API_Key' ,
                              'qualifier'     => 'likes' , // loves , likes , shares , ...
                              'content'       => '(LOL)' ,
                      ) ,
                      '/tmp/plurk_cookie'
              )
      );




至於更多的 Plurk API 請上官網看囉,用法應該很簡單,只需把上頭的 array 中的變數改一下就行啦,至於回傳資料是 JSON 格式,有需要的請自行去處理囉,上述範例可完成發一則噗浪囉,有些 API 是需要 Login 的,那就要記得先完成一次 Users/login ,將資料存在 cookie 中,才能接著去嘗試其他 API 啦。


剩下的有空再來玩。


實作範例(@2010/01/08更新)



// Users/login
print_r(
        do_act(
                'http://www.plurk.com/API/Users/login' ,
                'POST' ,
                array(
                        'api_key'       => 'cGRgp6VPBY0oNwP47iudVmVHzOlDqzIj' ,
                        'username'      => 'changyy_paper' ,
                        'password'      => 'qazwsxed'
                ) ,
                '/tmp/frank'
        )
);

echo "\n\n";

// Timeline/getPlurks
print_r(
        do_act(
                'http://www.plurk.com/API/Timeline/getPlurks' ,
                'POST' ,
                array(
                        'api_key'       => 'cGRgp6VPBY0oNwP47iudVmVHzOlDqzIj' ,
                        'offset'        => '2009-6-20T21:55:34'
                ) ,
                '/tmp/frank'
        )
);

echo "\n\n";

// Timeline/plurkAdd
print_r(
        do_act(
                'http://www.plurk.com/API/Timeline/plurkAdd' ,
                'POST' ,
                array(
                        'api_key'       => 'cGRgp6VPBY0oNwP47iudVmVHzOlDqzIj' ,
                        'qualifier'     => 'likes' , // loves , likes , shares , ...
                        'content'       => '(LOL)' ,
                ) ,
                '/tmp/frank'
        )
);


1 則留言:

  1. 版大,我照著你的文章修改了API_KEY
    我對PHP沒有很了解,一開始把你的範例都寫在function裡面
    在Dreamweaver檢測網頁是正常的
    不過在Plurk上卻沒有任何測驗時輸入的字串
    所以我想應該是要把底下的範例拉出function區塊...
    可是一抽出function區塊...就會出現excwption 好像突然不認識 curl_init() 這個方法了

    版主回覆:(05/07/2010 04:58:01 AM)


    它是需要 curl 的支援, 請增加這個 library 來使用囉, 若你的 PHP 跑在 Windows 上, 那我記得預設的安裝檔常常已經有了, 但預設沒有打開, 可能只要在 php.ini 啟用就行了(記得確定extension_dir位置以及拿掉extension=php_curl.dll前面的 ; 囉)

    回覆刪除