ゆーにゃんったー

診断メーカーをご存知でしょうか。
毎回、診断ボタンをクリックすると、診断結果を表示してくれるものです。

ところで、私の友人にゆーにゃんがいます。
ゆーにゃんは優しくて穏やかなんだけど、二本指でもタイピングが早い、
そんな同じ栃木出身の友人です。

で、だれかが「ゆーにゃん」という文字列が出るかどうかの診断メーカーを作成しました。
だれだろう、わかんないけど凄くひまなひとがつくったんだろう・・・

やってみるとわかりますがなかなか「ゆーにゃん」が出ません。
スクリーンショット 2012-12-21 17.03.59

3回くらいやったんですが全然ゆーにゃんが見れません。
どうしても見たくなったので、python でゆーにゃんったー攻略プログラムを作ろうということになりました。

ゆーにゃんったーの仕組み

  1. 自分のtwitterIDを入力(これがPOSTするデータ)
  2. 診断ボタン押下('u' というキーで上記で入力したIDを送信)
  3. 「ゆーにゃん」が出なくてげんなり(divタグの'result'クラスの中)

診断メーカーは入力されるIDごとに結果が異なるので、
今回は、ランダムなIDをどんどんPOSTして、「ゆーにゃん」を見つけたいと思います。

#!/bin/python
# coding: utf-8

import re, random, string, urllib, urllib2, BeautifulSoup
from django.utils import html

def get_yunyan():
  # ゆーにゃんったーのURL
  url = 'http://shindanmaker.com/128157'

  # POSTデータ作成
  code =	"".join([ random.choice(string.ascii_letters) for i in range(6) ])
  post_data = { 'u': code }
  encoded_args = urllib.urlencode(post_data)

  # POST リクエスト送信
  html_data = urllib2.urlopen(url, encoded_args).read()

  # BeautifulSoup で解析
  soup = BeautifulSoup.BeautifulSoup(html_data)
  li = soup.find('div', { 'class': 'result'}).findChildren()
  yunyan_string = html.strip_tags(li)

  # 整形
  p = re.compile(r'(\t)')
  yunyan_list =  p.split(yunyan_string)

  return yunyan_list[2], code

def is_yunyan(yunyan):
  return yunyan.encode('utf-8') == 'ゆーにゃん'

def main():
  while 1:
    yunyan = get_yunyan()
    print yunyan[0] + ': ' + yunyan[1]

    if is_yunyan(yunyan[0]):
      break

if __name__ == '__main__':
  main()

実行!
スクリーンショット 2012-12-21 18.06.01

できました (* ゚ω゚ *)!やっとゆーにゃんを見つけた!