2009年9月6日 星期日

PLURK BOT 範例

這是一個以 自由時報即時新聞 為基礎建立的 php plurk bot 範例
會貼出最新的10條新聞




注意
要把程式內的 12345 及 67890 替換為你 PLURK 的登入帳號及密碼
且須用到 cURL 模組
請確認你的環境是否有支援。

  1. <?
  2. header('Content-type:text/html; charset=utf-8');
  3. define('NICKNAME', '12345'); //12345 => 改為你的 PLURK ID
  4. define('PASSWORD', '67890'); //67890 => 改為你的 PLURK PASSWORD
  5. define('USER_ID', getuserid(NICKNAME));
  6. // login plurk ===========================================================
  7.     $ch = curl_init();
  8.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  9.     curl_setopt($ch, CURLOPT_COOKIEJAR, 'plurk_cookie.txt');
  10.     curl_setopt($ch, CURLOPT_URL, 'http://www.plurk.com/Users/login');
  11.     curl_setopt($ch, CURLOPT_POSTFIELDS, 'nick_name='.NICKNAME.'&password='.PASSWORD);
  12.     curl_exec($ch);
  13.     curl_close($ch);
  14. //=========================================================================  
  15. $message = '**Libertytimes** Live News';
  16. plurk($message);
  17. $url = "http://iservice.libertytimes.com.tw/liveNews/list2.php";
  18. $baseurl = "http://iservice.libertytimes.com.tw/liveNews/";
  19. $contents = download($url);
  20. preg_match_all('/<li>(.*?)<\/li>/s',$contents,$match);
  21. if ($match[0]){
  22.     $plurkid = getplurkid();
  23.     for ($i=0;$i<10;$i++){
  24.         sleep(5);
  25.         $out = $match[0][$i];
  26.         $link = tinyurl(preg_replace('/(.*?)<a href=\"(.*?)\"(.*)/s',"$baseurl$2",$out));
  27.         $out = preg_replace('/(.*?)<a href=\"(.*?)\" target=_blank>(.*?)<\/a><\/span>(.*?)<\/li>/s',"$link ($3) $4",$out);
  28.         replurk($out,$plurkid);  
  29.     }
  30. }
  31. function download($url){
  32.     $ch = curl_init();
  33.     curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727)');
  34.     curl_setopt($ch,CURLOPT_URL,$url);
  35.     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  36.     $contents = curl_exec($ch);
  37.     curl_close($ch);
  38.     return $contents;
  39. }
  40. function getuserid(){
  41.     $url= 'http://www.plurk.com/'.NICKNAME;
  42.     $fid = download($url);
  43.     preg_match('/user_id\": (.*?)\,/s',$fid,$matches);
  44.     $u_id = $matches[1];
  45.     return($u_id);
  46. }
  47. function tinyurl($url){
  48.     return(trim(download('http://tinyurl.com/api-create.php?url='.$url)));
  49. }
  50.  
  51. function plurk($message){
  52.   // plurk
  53.     $ch = curl_init();
  54.     curl_setopt($ch, CURLOPT_COOKIEFILE, 'plurk_cookie.txt');
  55.     curl_setopt($ch, CURLOPT_URL, 'http://www.plurk.com/TimeLine/addPlurk');
  56.     curl_setopt($ch, CURLOPT_POSTFIELDS, 'qualifier=gives&content='.urlencode($message).'&lang=tr_ch&no_comments=0&uid='.USER_ID);
  57.     curl_exec($ch);
  58.     curl_close($ch);
  59. }
  60. function replurk($message,$plurk_id){
  61.   // replurk
  62.   $ch = curl_init();
  63.   curl_setopt($ch, CURLOPT_COOKIEFILE, 'plurk_cookie.txt');
  64.   curl_setopt($ch, CURLOPT_URL, 'http://www.plurk.com/Responses/add');
  65.   curl_setopt($ch, CURLOPT_POSTFIELDS, 'posted='.$update.'&qualifier=gives&content='.urlencode($message).'&p_uid='.USER_ID.'&plurk_id='.$plurk_id.'&lang=tr_ch&no_comments=0&uid='.USER_ID);
  66.   curl_exec($ch);
  67.   curl_close($ch);
  68. } 
  69. function getplurkid(){
  70. //get plurk id
  71.     sleep(2);
  72.     $url   = 'http://www.plurk.com/'.NICKNAME.'.xml';
  73.     $plurk = download($url);
  74.     preg_match('/<id>tag:plurk.com\;(.*?)\;(.*?)</s',$plurk,$pid);
  75.     $plurk_id = $pid[2];
  76.     return($plurk_id);
  77. }
  78. ?>


結果如下:



當然,你可再搭配排程軟體定時發佈新聞。


.

13 則留言:

  1. 我是使用appserv-win32-2.5.10 + 您介紹啟動cURL模組,但會出現亂碼ㄟ!!!

    回覆刪除
  2. @Hung
    我不知問題出在哪
    可否告知些 亂碼 的樣本
    謝謝。

    回覆刪除
  3. 下面就是我得到的亂碼

    {"plurk": {"lang": "tr_ch", "content": "**Libertytimes**<\/b> Live News", "content_raw": "**Libertytimes** Live News", "user_id": 4722732, "plurk_type": 0, "plurk_id": 116694091, "response_count": 0, "qualifier": "gives", "id": 116694091, "is_unread": 0, "responses_seen": 0, "posted": new Date("Mon, 14 Sep 2009 15:33:22 GMT"), "limited_to": null, "no_comments": 0, "owner_id": 4722732}, "error": null}{"object": {"lang": "tr_ch", "content_raw": "http:\/\/tinyurl.com\/lxl823 (\u5fb7\u7e3d\u7406\u7af6\u9078\u96fb\u8996\u8faf\u8ad6\u5f8c \u53f2\u5766\u9ea5\u723e\u6c23\u52e2\u5927\u632f) 09-14 23:25", "user_id": 4722732, "qualifier": "gives", "plurk_id": 116694091, "content

    回覆刪除
  4. @Hung
    上面的亂碼是 plurk server 回應的,不用理它。
    其實你發的新聞噗有成功發出。

    http://www.plurk.com/p/1xh5qj

    回覆刪除
  5. 我執行plurk bot後,出現一片白色畫面.....

    不知為何?

    回覆刪除
  6. 感謝您的分享大作,我也測試成功可用,耶!!!不過我試了同時私噗給兩人都不成功,是不是語法錯誤?limited_to後面如何接多個人呢??向您求救了!

    回覆刪除
  7. @柴魁客漫遊
    假設要傳給兩個人私噗
    你的 uid 是 77777
    他們的 uid 分別是 12345 及 67890
    那 limited_to= 後面要接的是
    [77777,"12345","67890"] urlencode 後的值
    也就是
    limited_to=%5B77777%2C%2212345%22%2C%2267890%22%5D

    回覆刪除
  8. 收到,非常感謝!我立即去Try....

    回覆刪除
  9. 網誌管理員已經移除這則留言。

    回覆刪除
  10. 版大安好,臺灣蘋果網頁上週改版導致php無法使用,乞求版大更新版本。

    回覆刪除
    回覆
    1. 已修正,請重新下載 ntad0328 !

      刪除
    2. 版大 不好意思 想問一下去哪裡下載? 謝謝

      刪除
  11. 版大,蘋果網頁改版了。

    回覆刪除