#はじめに
今回はmastodonで特定のハッシュタグの画像urlを取得するプログラムを作りました。動機は今度friends.nicoがサービス終了してしまうのでサーバ上にある画像を保存したいと考えたからです。
プログラミング初心者なので結構ガバガバなので何か指摘があったらコメントしてください。
#全体の流れ
- モジュールインポート
- ログイン
- 値を決める
- 任意の回数ループして画像urlを取得する
#プログラム
解説はコメントにだいたいかいてあるはずなので頑張ってコードとコメントを読んで理解してください。そんなに難しいものではないと思います。
また、画像のダウンロードはirvineというソフトを使いました。
#マストドンにおいて特定のハッシュタグの付いた画像tootの画像のurlをすべて取得するプログラム
#モジュールインポート
from mastodon import Mastodon
import re
#login、あらかじめいろいろ取得しといて
mastodon = Mastodon(
client_id="app_key.txt",
access_token="user_key.txt",
api_base_url = "https://****.***" #じぶんのインスタンスで
)
#main
hashtag = 'おっぱい' #任意のワード
max_id = 1145141919810893 #このid以下のものを取得これは下のプログラムでいうrowのリストの中にあるから適当にしらべて
get_number = 1919 #取得するtoot数
cycle = (get_number//40)+1 #ループ回数、下のやつでlimitを40回にしたのは処理を軽くするため
#ループ
while(cycle > 0):
tl = mastodon.timeline_hashtag(max_id=max_id,hashtag=hashtag,limit=40) #tootを取得、リスト、limitは40まで
cycle = cycle - 1 #ループ回数
count = 0 #これはなくてもいいけどデバッグ用に置いておくあとで`print(count)`すればいい
#画像のurlのみ取得
for row in (tl):
count = count+1
if row['media_attachments'] == []:
max_id = row['id'] #最後の['id']を取得してループ
else:
print(row['media_attachments'][0]['url']) #ここに[0]はさむのは辞書、リスト、辞書の内包表記になってるから
max_id = row['id'] #最後の['id']を取得してループ
#注意ポイント
mastodon.timeline_hashtag
のlimit
がの限界が40までなのでたくさんさかのぼるためにはmax_id
(指定したid以下のtootを取得する)を変えていく必要があります。while
でループしているのはそのためです。
#おわりに
ぱうーとかでつかえそうですね。
#参考にした記事
https://qiita.com/itsumonotakumi/items/1f9273a07f1f7189921f
https://toshipedia.jp/201803133574/