PythonのCGIスクリプトで診断メーカーの診断結果を複数同時に取得する
診断メーカーの複数の診断結果をテキストで返すCGIスクリプト。結果をHTMLから抽出するのにBeautifulSoupライブラリを使用した。
追記: 2010/11/02 HTML構造の変化に伴ってソースを変更しました。
#! /usr/bin/python2.6 # coding: utf-8 import cgi import time import urllib from BeautifulSoup import BeautifulSoup fs = cgi.FieldStorage() url = 'http://shindanmaker.com/' def resp(user, nums): rlst = [] for n in nums: data = urllib.urlencode({'u': user}) cont = urllib.urlopen(url + n, data).read() soup = BeautifulSoup(cont) # 2010/11/02 #title = soup.find('div', {'class':'shindantitle'}).find('h1').next.next title = soup.find('div', {'class':'shindantitle2'}).find('a').contents[0] result = soup.find('div', {'class':'result'}).find('div').contents[0].strip() rlst.append('\t'.join([title, result])) time.sleep(2) # wait 2 seconds per request print '\n'.join(rlst) def main(): print 'Content-Type: text/plain; charset-utf-8' print '' try: user = fs.getvalue('user') nums = fs.getvalue('nums').split(',') resp(user, nums) except: print 'bad request' main()
実行結果
ローカルにサーバを立ち上げて実行確認。
例: /cgi-bin/shindan.py?user=brainfs&nums=43421,43401,5105,18312 のレスポンス
パワ○ロったー(投手版) brainfsは『球速 MAX161km/h、コントロールC、スタミナEで、決め球は変化量4のSFF』です。 表情ったー brainfsは『(`・_ ̄)』です。 二次元女体化してやったー brainfsを二次元女体化すると『服はワンピースで、つり目で茶髪のロングのツインテールで兎耳+兎尾でおっちょこちょいな感じのキャラ』のようだ あなたを漢字75文字で表します。 ≫brainfsを漢字75文字で表すと⇒胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸胸超無理