2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiitaでフォロバするのがめんどくさい。自動化してみよう。

Posted at

初めに

私はなぜか、初めのころ、Qiitaでフォロバは絶対にする!
とか思ってたらしく、今、フォローを477回もしているのですね。
数としてはまったく大したことないですが、毎回、フォローしてくださった人フォロバして…
っていうのははっきり言ってもう面倒くさくなってきてしまった。(だったらやるなよ)でもやり返さないのはやだもん!

というわけで、今回はPythonでQiitaでのフォロバ機能を作成します。

What you need

・・・英語っていいね。頭良く感じれるのは私だけかな?

  1. Python
  2. Selenium(use in Python)
  3. developer tool

何をしたいの?

  1. Qiitaにログインする
  2. 私をフォローしてくれている人の一覧ページへ行く
  3. 私がその人をフォローしていなかったらフォローする

コードを書いて!

って誰かに頼むのもいいかもだけど、自分でモノが作れるから楽しいんですよね。

今回、大きなところは「ログイン」ですね。
Cookieを使用します。

今回は、ログイン機能の部分のみ解説します。
他のコードは普通のスクレイピングと似たり寄ったりなので(・_・)

§ ログイン機能

code.py
def login(secure_token, session_key):
    global driber

    driber.add_cookie({
        "name"     :  "secure_token",
        "value"    :  secure_token,
        "Domain"   :  ".qiita.com",
        "Expires"  :  "Fri, 11 Mar 2044 21:35:06 GMT",
        "HttpOnly" :  "true",
        "Secure"   :  "true"
    })
    driber.add_cookie({
        "name"     : "user_session_key",
        "value"    : session_key,
        "Domain"   : ".qiita.com",
        "Expires"  : "Tue, 11 Mar 2025 21:51:15 GMT",
        "HttpOnly" : "true",
        "Secure"   : "false"
    })

seleniumでのcookieの扱い方は、こちら取説を参照してみてください。

上記の関数は、

login(
secure_token="<your secure_token>",
session_key="<your session_key>"
)

というふうにして呼び出します。

さて、問題の引数ですが、これはブラウザのデベロッパーツールで確認できます。
今回はFirefoxでのやり方のみ解説させていただきます。

この際、事前にQiitaにはログインしといてください。

CONTROL + SHIFT + I のショートカットキーでデベロッパーツールを開けます。

image.png

のようになるので、上部のヘッダーから、「ストレージ」を選択し、左のバーからCookieを選択、そして、[ https://qiita.com ] を選択します。

image.png

な感じになります。
上のイメージに表示されているCookieの内、secure_tokenとuser_session_keyをログイン時に必要とします。
ので、この二つの値(イメージでは赤く塗りつぶしてある部分です)をそれぞれ、先ほどのログイン関数の引数として使います。

以上。ログインについてでした。

§ スクレイピング&フォロバ(というか、全てのコード)

コメントにて、さりげない解説をいたします。

code.py
from selenium import webdriver
from selenium.webdriver.common.by import By

import time as timer

qiitaLink = "https://qiita.com/"

driber = webdriver.Firefox()

driber.get(qiitaLink)  # qiitaのホームページへ
timer.sleep(5.0)

def login(secure_token, session_key):
    global driber

    driber.add_cookie({
        "name"     :  "secure_token",
        "value"    :  secure_token,
        "Domain"   :  ".qiita.com",
        "Expires"  :  "Fri, 11 Mar 2044 21:35:06 GMT",
        "HttpOnly" :  "true",
        "Secure"   :  "true"
    })
    driber.add_cookie({
        "name"     : "user_session_key",
        "value"    : session_key,
        "Domain"   : ".qiita.com",
        "Expires"  : "Tue, 11 Mar 2025 21:51:15 GMT",
        "HttpOnly" : "true",
        "Secure"   : "false"
    })

def followback():
    global driber

    # フォロワー一覧ページへ
    page = "https://qiita.com/chi1180/followers?page="
    driber.get(page + "1")
    timer.sleep(6.0)

    # ポップアップが表示され、要素の重なりによってボタンが押せずエラーになるため、そやつを消す
    popup_btn = driber.find_element(By.CLASS_NAME, "coins-close-button")
    if popup_btn: popup_btn.click()
    timer.sleep(2.0)

    # ページ数を取得
    page_count = int(driber.find_element(By.CLASS_NAME, "style-1l61mdd").find_element(By.TAG_NAME, "span").text.split(" / ")[1])

    # ページごとにチェック、フォロバ
    for i in range(page_count):
        page_num = i + 1

        driber.get(page + str(page_num))
        timer.sleep(5.0)

        # フォローボタンを取得
        followers = driber.find_elements(By.CLASS_NAME, "style-1fojn88")

        # フォローする
        for follower in followers:
            follower.click()

            # 連続でフォローすると、時たまフォローに失敗しましたと言わるるので、間隔を開ける
            timer.sleep(0.5)


# 関数呼び出し
login(secure_token=my_sequre_token, session_key=my_session_key)
followback()

driber.quit()

## わぁ~~~
## コード書いてる際に気づいたのですが、[driber]は[driver]ですね。たぶん。
## 直すのはめんどくさい!べつにいいだろぉ?

最後に

はい、以上がQiitaの自動フォロバ機能です。
Windowsであれば、タスクマネージャーで定期実行させたりとか、してみてもいいかもしれませんね~

で、このプログラムですが、ちょっと嫌だな~というのが、前回スクレイピングしたページもスクレイピングするってところなんですよね。
まぁ、Pythonはファイルの読み込み、書き出しも簡単に記述できるので、やる気になったら実装してみましょうか。今はもうめんどくさくなってきましたがな。

以上です。
最後までよんでくれてありがとお!

2
2
1

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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?