LoginSignup
10
11

More than 5 years have passed since last update.

大量のTwitterアカウントの生存確認方法 めんどくさい作業を一括で!

Posted at

動機

Twitterでいままでリプライを送ったひとたちをリストにまとめてみました。
手作業で確認してみると、アカウントが消されていたり凍結されている人結構いる...

本当の動機はアカウント凍結を食らったからです。(誤BANだと思います...)
昔会話したことがある人達をリストにまとめて、ひとつずつチェックしていったら生きていない人が結構多くてめんどくさくなったからです。
その時の話→(Twitter凍結を食らった人たちへ) twilog.orgから今までに会話したことある人を取得する

用意するもの

Twitterのアカウントのリンクが書かれているファイル

tmp.jpg

方法

ファイルを用意して、プログラム中のパスを書き換えて実行する。python check_acocunts.py
内部の動作は、ファイル中のリンクにアクセスしてPyQueryを使ってスクレイピングしてアカウントが削除されているか判断しています。

※API使える人はそっちでやりましょう。この方法は正攻法ではありません。
※wait_timeはtwitter.comにアクセスした後に待つ秒数です。小さくすると処理は早くなりますが、twitter.comサーバに負担をかけることになります。最悪アカウント削除されます(?)。
※ちなみにこのプログラムはユーザの名前が"凍結済みアカウント"と設定されている人は死亡アカウントにカウントされます。(いないと思うけど)

check_accounts.py
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)

まとめ

いい感じに生きている人達を抽出できました。

image.png

ちなみに私のいままでのリプライを送ったことある人達の生存率は63.93%でした。消えすぎでは?

なんだこのまったく需要が無さそうな記事は

10
11
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11