GWで唯一休みだった土日(残りは休日出勤)・・・を利用して、facebookへ日記を自動投稿するスクリプトを修正。
4月中旬から稼働しなくなったので、パケットをキャプチャして原因調査。
原因は、4月18日からfacebookの内部実装が代わり inputタグのhidden属性の中で次の値を送るようになりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{"value":80, "_pr_":1336309220, "_pmc_":1336309220, "lists_processed":true, "friends":0, "lists":[], "networks":[], "list_anon":0, "ids_anon":[], "list_x_anon":0, "ids_x_anon":[], "tdata":[], "lists_x":[], "objects":[], "no_tag_expansion":0} |
この「{」などの特殊文字がISO Lathin 文字コードを使用して「{」などになってました。。
私の実装は input タグの「name」「value」を見つけたら、POST用のリストに登録するようになっています。
そこで、エンコードされた文字列をデコードする処理を追加。
1 2 3 4 5 6 7 8 9 10 11 |
connection = self.opener.open("%s/home.php" % FACEBOOK.FB_MOBILE_URI) re_html = connection.read().decode("utf-8") form = re.search('<form method="post" id="composer_form"[\S ]*',re_html) data_variable = re.findall('name="\S*" value="\S*"', form.group(0)) for data in data_variable: cari = re.search('name="(?P<name>\S*)" value="(?P<value>\S*)"',data) name = cari.group('name') value = cari.group('value') <span class="red12"> self.var_post[name] = html.parser.HTMLParser().unescape(value)</span> |
見事、稼働するようになりました。
また、投稿ロジック自体はfacebookに依存しないのでどんな投稿サイトでも利用できます。
が・・・・
原因が分からず wireshark 利用してパケット取得。
Window上にpython3をインストールして何度も実験&調査。
結果、GWの貴重な一日が無駄になりました。
最初からwireshark使って調査すれば良かった・・・・。
というより、Facebookの公式APIを使え・・・って話だよね。。