從iTunes中拉取podcast的評論資訊

yinchuan發表於2013-06-14

其實是非常簡單的,不過中間走了好好彎路,唉……

參考以下Python程式碼:

# coding: utf-8
import httplib

podcast_id = "535367738"
store_front = "143465-2,12"
itunes_url = "/WebObjects/MZStore.woa/wa/customerReviews?sort=4&displayable-kind=4&id=%s" % podcast_id
user-agent = "iTunes/11.0.2 (Windows; Microsoft Windows 7 Ultimate Edition Service Pack 1 (Build 7601)) AppleWebKit/536.27.1"
host = "itunes.apple.com"
headers = {
      'Host' : host,
      "User-Agent" : user-agent, 
      'X-Apple-Store-Front' : store_front,
      'X-Apple-Tz' : '-18000', 
     }

conn = httplib.HTTPConnection(host)
# conn.set_debuglevel(2)
conn.request('GET', itunes_url, headers=headers)
res = conn.getresponse()
print res.read()
conn.close()

podcast_id

  • 即podcast的id,這裡以《科學脫口秀》為例
  • 在url中以查詢字串的形式傳遞給server
  • 可以在iTunes中對應的podcast頁面中找到

store_front

  • iTunes商店的區域程式碼,預設是美國區,我這裡用的是中國區
  • 從http請求的header裡面傳遞給server
  • 這個值應該可以有地方可以查到,不過我是抓取iTunes連線網路的http包查到的,抓包工具是Fiddler2
  • iTunes中各個區域的評論是分開的,最開始沒注意這個,評論數遠遠少於預期的數量

itunes_url

  • 這個就是podcast資訊頁面的url了,搜了好久才在這裡找到
  • 這個值用在http請求中
  • 注意這個url中有兩個查詢字串,displayable-kind 和 id,一個都不能少。displayable-kind和sort是查詢結果的顯示方式和排序,sort值為4表示按時間順序(新的在前)。如果沒有displayable-kind或值不為4,會返回204。
  • 剛開始一直不明白為什麼會204,以為是header的問題,結果不是

user-agent

  • User-Agent這個很關鍵,只有當UA是iTunes時才會返回html程式碼;否則,會返回launch客戶端的程式碼,在瀏覽器中的表現就是彈出視窗提示開啟iTunes軟體

剩下的就是用httplib這個模組去獲取http資訊了,程式碼只有基本的功能,沒有任何的錯誤處理。

相關文章