動機
Twitterでいままでリプライを送ったひとたちをリストにまとめてみました。
手作業で確認してみると、アカウントが消されていたり凍結されている人結構いる...
本当の動機はアカウント凍結を食らったからです。(誤BANだと思います...)
昔会話したことがある人達をリストにまとめて、ひとつずつチェックしていったら生きていない人が結構多くてめんどくさくなったからです。
その時の話→(Twitter凍結を食らった人たちへ) twilog.orgから今までに会話したことある人を取得する
用意するもの
Twitterのアカウントのリンクが書かれているファイル
方法
ファイルを用意して、プログラム中のパスを書き換えて実行する。python check_acocunts.py
内部の動作は、ファイル中のリンクにアクセスしてPyQueryを使ってスクレイピングしてアカウントが削除されているか判断しています。
※API使える人はそっちでやりましょう。この方法は正攻法ではありません。
※wait_timeはtwitter.comにアクセスした後に待つ秒数です。小さくすると処理は早くなりますが、twitter.comサーバに負担をかけることになります。最悪アカウント削除されます(?)。
※ちなみにこのプログラムはユーザの名前が"凍結済みアカウント"と設定されている人は死亡アカウントにカウントされます。(いないと思うけど)
import time
import urllib.request
from pyquery import PyQuery as pq
import codecs
fname = "Twitterのアカウントのリンクが書かれているファイル.txt"
out_file = True
wait_time = 30
def write_file(fname, array):
f = codecs.open(fname, 'w', 'utf-8')
f.writelines("\n".join(array))
f.close()
def is_alive_account(url):
try:
with urllib.request.urlopen(url) as res:
html = res.read().decode("utf-8")
dom = pq(html)
title = dom('h1').text()
if title == "凍結済みアカウント":
return False
else:
return True
except urllib.error.HTTPError:
return False
if __name__ == "__main__":
f = open(fname)
lines = f.readlines()
f.close()
alive_accounts = []
dead_accounts = []
for (idx, line) in enumerate(lines):
url = line.rstrip('\r\n')
dead_or_alive = is_alive_account(url)
print(f"{idx+1}/{len(lines)}", "生存" if dead_or_alive else "死亡", url)
if dead_or_alive:
alive_accounts.append(url)
else:
dead_accounts.append(url)
time.sleep(wait_time)
print("alive_accounts", len(alive_accounts))
print("dead_accounts", len(dead_accounts))
if out_file:
write_file("alive_accounts.txt", alive_accounts)
write_file("dead_accounts.txt", dead_accounts)
まとめ
いい感じに生きている人達を抽出できました。
ちなみに私のいままでのリプライを送ったことある人達の生存率は63.93%でした。消えすぎでは?
なんだこのまったく需要が無さそうな記事は