Using API
Last updated
Was this helpful?
Last updated
Was this helpful?
何謂「API」?你可以自己看看,但簡單的說就是,原本我們從客戶端要存取伺服器端的資料時,如果伺服器端允許你下資料庫查詢,那你就可以用資料庫語言如SQL去查詢資料(不過這是不可能的);或者在伺服器端沒提供你直接存取資料庫,但反正他是網頁,你就把他爬下來(這是最常見的)。但有些伺服器會設計有API,讓前端工程師比較容易取得後端資料,卻不必讓他們接觸到後端資料庫的實作。所以,照這麼說來,功能性上地來說,API就是伺服器端所提供你的一套資料查詢方法。
R Streaming API
R package for twitter stream API
可查詢韓國瑜的相關臉書廣告
Example:
Example: .
Example:
你也可以參考這篇網友的教學。
可參考該Youtuber的說明來啟用Google Cloud Platform。會需要用到信用卡帳號,但隨時可以停止計費,若超過額度也會在詢問後才開始自動計費。
在上方搜尋列搜尋youtube data api後點選Youtube Data API v3,點選ENABLE後即可使用。
通常會預設有一個My First Project,你可以點選Project處建立一個新的Project。建立好後,點選憑證Credentials處,然後點選上方的新增憑證。憑證有兩種,一種是API Key,另一種是OAuth client ID。
API Key這種是,你可以透過一串網址來獲取資料,這串網址不止有你要什麼資料,你還要把你的API Key給附上去。通常可以用這種方式就好。
申請後會跳出讓你複製API Key的視窗,但未來也可以在底下的管理介面找得到。
應用程式類型應選第一個網頁應用程式,名稱自取,就可以建立用戶端了。
下面的app_id
和app_token
是不能用的,你必須取得你自己的。
疑難排解:通常第一次做過OAuth後他會在你的電腦存一個json檔,之後就讀取該檔案。所以如果你下次更換app_id
或app_token
時,再重新執行yt_oauth()
時他可能不會動,這時候你只需要把空字串指定給token他就會重新Update,如同以下的第五行。
例如如果你要取某支影片的comments,又要取超過100筆資料,Code如下,但是你應該會發現,他不讓你取超過200筆,這怎麼辦?自己寫Code讀取API,請見以下兩節。
太依靠別人的Client Packages是有點危險的,這樣你還是不會用API。所以還是要了解一下該怎麼用API。以Youtube data而言大體上就這三種API,Channel、Playlist與Comments。而API就長得像網址一樣,你可以透過指定不同的參數來獲取不同的資料。而API既然是個網址,那編法就是服務方定的,所以不同的服務其API的用法都差很多。唯獨就是以下幾點是共同的
所有查詢參數通通寫成網址
所有的查詢一定會有最大數量,他不會讓你一次全部取走,這樣才不會造成伺服器負擔,也不會造成資料容易被竊取。
那還未取完的資料API會在哪裡,通常可以在你目前所取得的這個資料中找到。
查詢某個Channel(CHANNEL_ID
)有哪些playlist的APIhttps://www.googleapis.com/youtube/v3/channels?part=contentDetails&id=CHANNEL_ID的id&key=YOUR_API_KEY
查詢某playlist(PLAYLIST_ID
)中有哪些Video的APIhttps://www.googleapis.com/youtube/v3/playlistItems?part=snippet,contentDetails,status&playlistId=PLAYLIST_ID&key=YOUR_API_KEY&maxResults=50
查詢某個Video(VIDEO_ID
)之留言的APIhttps://www.googleapis.com/youtube/v3/commentThreads?part=snippet,replies&videoId=VIDEO_ID&key=YOUR_API_KEY
前面說到那還沒取完的資料要怎麼取?此時要找到回傳資料的nextPageToken
,取代下方的NEXT_PAGETOKEN
,然後把他當成API的一部分繼續搜尋。就只多了最後一個參數而已。https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,contentDetails,status&playlistId=PLAYLIST_ID&key=YOUR_API_KEYAbccato&maxResults=50&pageToken=NEXT_PAGETOKEN
接下來,我要改寫自己的querylist。
這邊用到了tuber_GET()
這個作者自己寫的function,等一下得接續查要怎麼GET()
。
往前找可以找到part = "snippet"
、text_format = "html"
。
pageToken
是用來取得下一頁用的,這邊的pageToken
先設為NULL
,因為第一頁不會有。
filter
是作者自己設的參數,我要的就是videoId,仿照上一節API的寫法加入videoId=vid
。
於是改寫過後完整的querylist
如下
接下來是參考tuber.R檔中的tuber_GET()
這個函式:
我可以結合上面的querylist,再參考前面提到的commentThreads查詢(如下,就只是把commentThreads貼過來而已),就可以把上面的tuber_GET()
合理改寫為
https://www.googleapis.com/youtube/v3/commentThreads?part=snippet,replies&videoId=VIDEO_ID&key=YOUR_API_KEY
此時,你若去取res
裡面的參數,可以得到以下結果res$nextPageToken "QURTSl9pM1RFUE02aFNEMWRhUmNDa2pXTWYzM1NRVDVxd19fZlB2YTI0UkZEM3F3LVJfclQ5ZWVFcm51TlMtN0V2eWdsS1kxZWJBX1J5aw=="
你也可以輸出req
中的url
來觀察你最後所下的API,是不是跟上面的API長得很像?‘
req$url
[1] "https://www.googleapis.com/youtube/v3/commentThreads?part=snippet&videoId=2zJkpNnyUx4&maxResults=101&textFormat=html&key=AIzaS11111H1pC1r111c191IOB181v32132132131U1I1E1pA"
>
拜訪。然後你會需要用一個Google account啟用你的服務,我建議你用學校給的Google Account,這樣可以讓你之後便於建立OAuth2.0服務。
OAuth Client ID這種是,你程式執行後,他會跳出一個一般我們需要通過OAuth驗證時常會跳出的視窗,點選用你的Gmail帳號驗證後即可通過。R有一個Youtube Client套件,他會需要你用OAuth的方式來驗證。而現在OAuth的申請比較嚴謹,因為這會讓你所開發的程式可以當成正式的App來使用,所以他會審核。但如果你想要他不審核你,那你可以用學校給的G Suite帳號,他可以選擇只在機構內使用,這樣就可以暫時不理會審核的程序。
如果是用已經包裹好的tuber client那就非常方便了,可以用別人幫你包裝好的函式取得video list、video comments等各種訊息。請直接參閱。
直接讀這種大服務所釋出的API對部分初學者又有點辛苦(這門課學到這裡多半是能夠自己讀了),所以我們可偷看看tuber套件是怎麼寫的,來學學怎麼存取API。首先要先找到tuber的,開啟其就可以看到該套件的所有R檔。假設我現在要抓的是某一個video的comments,那我應該是找get_comments.R
這個檔案,我把比較重要的片段摘錄出來: