2016-06-13 20 views
1

我想在其中一個較小的(少於10,000個問題)stackexchange網站中列出所有問題的當前標題。我在這裏嘗試了交互式實用程序:https://api.stackexchange.com/docs/questions並且它都將結果報告爲底部的json,並在頂部生成請求的url。例如:如何限制stackexchange api返回的字段,並關閉分頁?

https://api.stackexchange.com/2.2/questions?order=desc&sort=activity&tagged=apples&site=cooking 

返回此JSON在我的瀏覽器:

{"items":[{"tags":["apples","crumble"],"owner":{ ... 
... 
...],"has_more":true,"quota_max":300,"quota_remaining":252} 

什麼是配額?在一個網站上進行一次搜索時,這個數字是10,000,但突然間在這裏只有300。

我不會經常這樣做,我想要的是編輯該網址(或類似網址)最快捷的方式,以便我可以獲取小網站上所有標題的列表。我不明白如何使用分頁,我不需要任何其他字段。我不在乎我是否得到了他們,但我想如果我排除他們,我可以一次擁有更多。

如果我需要編寫腳本,Python(2.7)是我的首選(唯一)語言。

回答

1

quota_max是您的申請每天允許的請求數。 300是未註冊應用程序的默認值。這曾經在描述throttles的頁面上直接提及,但似乎已被刪除。 Here is描述默認值的歷史信息。

要增加到10,000,您需要register an application然後authenticate通過在腳本中傳遞訪問令牌。


爲了獲得網站上的所有標題,您可以使用Python庫的幫助:


假設你已經註冊了您的應用和驗證,我們可以繼續進行。

首先,安裝StackAPI(documentation):

pip install stackapi 

這個代碼就搶10,000最近的問題(max_pages * page_size)的網站hardwarerecs。每個頁面都需要一個API命中,所以每頁上的項目越多,幾個API調用就越少。

from stackapi import StackAPI 

SITE = StackAPI('hardwarerecs') 
SITE.page_size = 100 
SITE.max_pages = 100 

# Filter to only get question title and link 
filter = '!BHMIbze0EQ*ved8LyoO6rNjkuLgHPR' 

questions = SITE.fetch('questions', filter=filter) 

questions變量是一本字典,看起來非常類似的API輸出,除了圖書館做了所有的傳呼你。您的數據是questions['data'],在這種情況下,包含字典看起來像這樣的列表:

[ 
... 
{u'link': u'http://hardwarerecs.stackexchange.com/questions/29/sound-board-to-replace-a-gl2200-in-a-house-of-worship-foh-setting', 
u'title': u'Sound board to replace a GL2200 in a house-of-worship FOH setting?'}, 
{ u'link': u'http://hardwarerecs.stackexchange.com/questions/31/passive-gps-tracker-logger', 
    u'title': u'Passive GPS tracker/logger'} 
... 
] 

此結果集僅限於標題,我們應用,因爲filter的鏈接。您可以通過調整Web UI中需要的字段並複製過濾器字段來找到適當的過濾器。

創建SITE參數時傳遞的參數hardwarerecs是網站域URL的第一部分。或者,您可以在查看/sites終點時查看您的網站的api_site_parameter

+0

好的,謝謝! - 你已經明白我需要知道什麼,並給我一個我可以使用的答案!我已經看過這些鏈接,並且它不會立即跳出我的視線,爲什麼'filter'被設置爲一個神祕的字符串或者我將如何到達,在安裝之後,我可以使用'help( )'或'.__ doc__'('filter ='!BHMIbze0EQ * ved8LyoO6rNjkuLgHPR'') – uhoh

+0

你能解釋一下這個神祕的字符串是如何工作的:'filter ='!BHMIbze0EQ * ved8LyoO6rNjkuLgHPR'',爲什麼它如此漫長而神祕?謝謝! – uhoh

+1

這是一個[很長的技術討論](https://kevinmontrose.com/2012/01/11/stack-exchange-api-v2-0-implementing-filters/)。如果您只是想爲您的API調用使用適當的過濾器,則可以通過導航到您在文檔中使用的API端點([/questions](http://api.stackexchange.com/docs/questions)例如),並在「試用」部分調整「過濾器」以包含您想要的字段。點擊保存,你會注意到「默認」改變爲像上面那樣神祕的字符串。將該字符串複製到應用程序中。 – Andy