[PHP] Twitter REST API (以Search API為例) – 使用 TwitterAPIExchange.php

基本上作者有一份文件,教學講得還蠻完整的,這個專案還不停的在更新。
同樣的,要使用 Search API 撈取 twitter 的歷史 tweets,必須要先到開發者網站去建立你的 Application 並取得 Consumer KeyConsumer SecretAccess Token  Access Token Secret
接著你需要到 TwitterAPIExchange 的 GitHub 上去下載這個專案回來

你會發現這個專案的檔案數目比 Phirehose 少了很多,最核心的也就只有 TwitterAPIExchange.php 這支檔案
把下載回來的原始碼資料夾放置到網頁或是應用程式的目錄下,接著開始編輯你要用來撈資料的 PHP 檔案:

1. 在檔案中引入 TwitterAPIExchange.php 這個檔案
require_once(‘TwitterAPIExchange.php’);
2. 接著你需要設定取得的 OAuth Keys
$settings = array(
    'oauth_access_token' => "YOUR_OAUTH_ACCESS_TOKEN",
    'oauth_access_token_secret' => "YOUR_OAUTH_ACCESS_TOKEN_SECRET",
    'consumer_key' => "YOUR_CONSUMER_KEY",
    'consumer_secret' => "YOUR_CONSUMER_SECRET"
);

之所以是用陣列來儲存這些 keys 的原因在於,我們稍後建立查詢物件 TwitterAPIExchange 的時候,就會直接在 Constructor 中用這四個 keys 來做物件初始化

3. 設定好了 Keys 之後,還需要設定你要存取的 API URL 和指定存取的方式為 GET 還是 POST
$url = 'https://api.twitter.com/1.1/search/tweets.json';
$requestMethod = 'GET';
4. 因為我們要取得有篩選過的資料,因此還要再多設定過濾參數
l   假如你是採用 GET 方法,直接寫成:
$getfield = '?q=Justin+AND+Singer&count=2';
(注意!有包含 “?q=" 這三個字元喔!)
l   假如你是採用 POST 方法,需要以陣列來一一儲存:
$postfields = array(
    'screen_name' => 'usernameToBlock', 
    'skip_status' => '1'
); 
5. 如此最主要的四個項目:KeyURLMethodfilter 都設定好了以後,就可以建立查詢物件 TwitterAPIExchange 來送出查詢請求
$twitter = new TwitterAPIExchange($settings);
echo $twitter->buildOauth($url, $requestMethod)
             ->setPostfields($postfields)
             ->performRequest();
new 出物件以後,利用這個物件先做驗證,然後設定查詢過濾參數,最後才發送出 request,伺服器接收以後會回傳要求存取的資料
回傳的物件多數為 JSON 格式,如果無法直接用 echo 解析(至少我無法),可以修改如下:
$json = $twitter->buildOauth($url, $requestMethod)
             ->setPostfields($postfields)
             ->performRequest();
var_dump(json_decode($json, true));
下圖為我上面使用 GET 方法像 Search API 的要求存取包含 Justin 和 Singer 兩個關鍵字的 tweets.json

你可以開啟 index.php 這支檔案試試看,那是一個作者寫的範例程式

這個作品還真的是很漂亮的一支程式

Twitter API:REST API & Streaming API

Twitter API Twitter 提供的一系列Web API服務,提供程式開發人員可以透過這些API來存取Twitter上的tweets,多數以JSON的格式回傳存取的資料,以比較常用的Search APIStreaming API為主,從2013年的3月開始,Twitter API更新為1.1版本,原本獨立的Search APIStreaming API也併入了REST API中,成為眾多API中的其中兩者。
因為1.0版已經全面停用,所以這裡不再提1.0版的用法。
Search API Streaming API 都是到Twitter的資料庫中去撈推文,但是這兩者所撈的資料型態卻有所不同。
1.        Search API: 這個API所存取的資料是Twitter的歷史推文資料,一次最多可以查到100個條目,預設為15

l   REST中的條目是:GET search/tweets (https://dev.twitter.com/docs/api/1.1/get/search/tweets)
l   API的存取URL:  https://api.twitter.com/1.1/search/tweets.json

2.        Streaming API: 這個API所存取的資料就是Twitter最即時的資料,一次最多可以抓400(一筆資料就是一個Stream),說是即時,其實也是送出查詢前的一小段時間到中止抓取資料當時的最後一筆資料
Streaming API分為publicusersite三種,我要介紹的以public為主,user是針對單一使用者的推文,例如針對我VeckHsiao的推文,至於site則是針對特定網站

n   POST statuses/filter – 可以自行定義查詢關鍵字等過濾器的方法
n   GET statuses/sample – 直接隨機抓取一小部分範例stream
n   GET statuses/firehose – 抓取所有的stream
(其實還有兩個,這裡講的是主要常見的三個)
要使用Twitter API存取資料,你需要先到Twitter的開發者頁面:https://dev.twitter.com/ 登入,接著你需要create一個application,這個Application基本上是指你要用來透過Twitter API存取tweets的網站,假如你沒有網站,其實隨便填一個網址就可以了,最重要的不是網站是否存在。


1. 按下create a new application來建立新的應用程式







2. 填寫必要欄位:NameDescriptionWebsite (URL)



3. 同意Rule和輸入驗證碼,按下按鈕就可以建立你的應用程式囉!
4. 成功建立應用程式後的資訊頁面,其中最重要的是consumer keyconsumer secret



5. 你還需要建立OAuth驗證碼才可以用



這裡要說明一下這個OAuth授權機制,OAuth是一個第三方授權的機制,讓Twitter可以發給要使用它們API的第三方應用程式(例如你的網頁)一個access token,讓應用程式可以不需要輸入使用者帳號與密碼,就可以使用API

※ 詳細的OAuth機制可以參考維基百科
事實上Twitter API的認證機制有兩種,一個是Basic Auth,只需要輸入你的Twitter帳號與密碼即可驗證並取得授權;另一個就是OAuth,從1.1版開始,所有的驗證都採用OAuth


6. 按下按鈕以後,頁面最下面就會產生你的Access token資訊,這裡同樣有兩個最重要的資料:Access tokenAccess token secret
NOTE:
1. consumer secretaccess token secret不可以洩漏!
2. 不論是使用Search API或是Stream API,甚至是其他需要授權的API,都需要取得這四個Key
OK!現在你可以開始使用Twitter API來抓Tweets囉!
這些API都有可以自行設定的參數,TwitterWeb API有兩種方法傳送存取的參數:GETPOST,詳細的參數表請參考各API的介紹網頁。
另外,因為Search APIStreaming API可以自己定義要查詢的term/keyword,所以Twitter還支援Search operator的使用,例如可以用OR來同時找多個關鍵字的Tweetsspace可以將多個單字組合成一個字;AND就是找同時包含多個關鍵字的Tweets…。
有一份針對如何使用Search API 的文件很值得參考:https://dev.twitter.com/docs/using-search
目前為止,Streaming API的關鍵字查詢還不知元中文與日文,例如你不能夠用: 小賈斯汀作為查詢的關鍵字,因為Streaming API的實作是使用空格作為區分字彙的依據,但是中文與日文的書寫習慣中並沒有依據空白來區隔字詞,英文與韓文則有。