HOME
  Security
   Software
    Hardware
  
FPGA
  CPU
   Android
    Raspberry Pi
  
nLite
  Xcode
   etc.
    ALL
  
LINK
BACK
 

2022/04/10

Pythonの Tweepyライブラリで Twitterの投稿内容を投稿画像込みで丸っと取得する方法 Pythonの Tweepyライブラリで Twitterの投稿内容を投稿画像込みで丸っと取得する方法

(まるっと取得したかった!質問は受け付けない!)

Tags: [Windows], [無人インストール]




● Twitterの特定アカウントの投稿内容を投稿画像込みで丸っと取得する方法

 まるっと取得したかった!質問は受け付けない!

 .NET C#版も作りました。

2022/04/14
.NET C#の Tweetinviライブラリで Twitterの投稿内容を投稿画像込みで丸っと取得する方法
.NET C#の Tweetinviライブラリで Twitterの投稿内容を投稿画像込みで丸っと取得する方法

  まるっと取得したかった!質問は受け付けない!

・必要な物
 取得したい Twitterのアカウントの @マークの部分(URLでも良い)
 Users lookupで user_idを取得して、
 Tweets lookupで 100件ずつ最後まで取得する。
 "includes"の "media"の "url"で画像をダウンロードする。
 以上!


●取得したい Twitterのアカウントの @マークの部分
@hogehoge_fugafuga
https://twitter.com/hogehoge_fugafuga
 の hogehoge_fugafugaの文字列。


● Twitter API v2 Users lookupで username(screen_name)から id(user_id)を取得する方法

 上記の
"hogehoge_fugafuga"
 を usernameに設定する。

Users lookup

User lookup by username

 API: GET /2/users/by/username/:username

 リクエスト
username: hogehoge_fugafuga

 レスポンス
{
  "data": {
    "id": "1234567890111111111",
    "name": "なまえ HOGEHOGE FUGAFUGA",
    "username": "hogehoge_fugafuga"
  }
}


● Twitter API v2 Tweets lookupで User ID紐付く投稿を画像の URL込みで丸っとゲットする方法

 上記の
"id": "1234567890111111111"
 を idに設定する。

Tweets lookup

User Tweets timeline by User ID

 API: GET /2/users/:id/tweets

 リクエスト
id: 1234567890111111111
max_results: 100
pagination_token: 最初は空、2ページ目以降(101件目~)は "next_token"を設定する
expansions: attachments.media_keys
tweet.fields: created_at
media.fields: url
・ RFC3339形式
start_time: 2012-01-23T00:00:00Z
end_time: 2012-01-23T23:00:00Z

 レスポンス
{
  "data": [
    {
      "attachments": {
        "media_keys": [
          "3_mmmmmmmmmmmmmmmmmm6"
        ]
      },
      "id": "1iiiiiiiiiiiiiiiii3",
      "text": "かきくけこ https://t.co/xxxxxxxxxx",
      "created_at": "2021-01-23T12:34:56.000Z"
    },
    {
      "attachments": {
        "media_keys": [
          "3_mmmmmmmmmmmmmmmmmm5"
        ]
      },
      "id": "iiiiiiiiiiiiiiiiii4",
      "text": "あいうえお https://t.co/xxxxxxxxxx"
      "created_at": "2021-01-01T23:45:00.000Z"
    },
    {
      "id": "iiiiiiiiiiiiiiiiii3",
      "text": "テキストだけ"
      "created_at": "2021-01-01T01:02:03.000Z"
    },
    ...
  ],
  "includes": {
    "media": [
      {
        "media_key": "3_mmmmmmmmmmmmmmmmmm6",
        "type": "photo",
        "url": "https://pbs.twimg.com/media/FExxxxxxxxxxxxx.jpg"
      },
      {
        "media_key": "3_mmmmmmmmmmmmmmmmmm5",
        "type": "photo",
        "url": "https://pbs.twimg.com/media/FExxxxxxxxxxxxx.jpg"
      },
      {
        "media_key": "7_mmmmmmmmmmmmmmmmmm7",
        "type": "video"
      },
      ...
    ]
  },
  "meta": {
    "result_count": 100,
    "newest_id": "nnnnnnnnnnnnnnnnnnn",
    "oldest_id": "ooooooooooooooooooo",
    "next_token": "nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
  }
}

 2ページ目以降は "previous_token"が有る。
  "meta": {
    "result_count": 100,
    "newest_id": "nnnnnnnnnnnnnnnnnnn",
    "oldest_id": "ooooooooooooooooooo",
    "previous_token": "ppppppppppppppppppppppppppppppppppppppppppppp",
    "next_token": "nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
  }


● Twitterの画像の取得方法

 上記の "url"の情報を使用する
"url": "https://pbs.twimg.com/media/FExxxxxxxxxxxxx.jpg"
 small 小さい画像
https://pbs.twimg.com/media/FExxxxxxxxxxxxx.jpg?format=jpg&name=small

 large 大きい画像
https://pbs.twimg.com/media/FExxxxxxxxxxxxx.jpg?format=jpg&name=large

 4096x4096 4096x4096pxで超デカイ画像
https://pbs.twimg.com/media/FExxxxxxxxxxxxx.jpg?format=jpg&name=4096x4096


● tweepyで適当に作りました

 tweepy v4.8.0

Tweepy Documentation

 使用している Twitter APIは v1.1です。

pip3 install tweepy

import tweepy

consumer_key = "xxxxxxx"
consumer_secret = "xxxxxxxxxxx"
screen_name="hogehoge_fugafuga"

auth = tweepy.auth.AppAuthHandler(consumer_key, consumer_secret)
api = tweepy.API(auth)

user = api.get_user(screen_name=screen_name)
print(user.id)
timelines = api.user_timeline(user_id=user.id)

# 100件単位で取得
count = 100
timelines = api.user_timeline(screen_name=screen_name, count=count)
print(len(timelines))
for tl in timelines:
    # print("===========")
    if not 'media' in tl._json['entities']:
        continue
    medias = tl._json['entities']['media']
    # print("===========")
    # print(tl.id)
    # print(tl.created_at)
    # print(tl.text)
    for media in medias:
        # print("===========")
        # print(media['id'])
        # print(media['media_url_https'] + "?format=jpg&name=" + str(media['original_info']['width']) + 'x' + str(media['original_info']['height']))
        # print("curl \"" + media['media_url_https'] + "?format=jpg&name=4096x4096\"" + " -o " + media['id_str'] + ".jpg")
        print("wget \"" + media['media_url_https'] + "?format=jpg&name=4096x4096\"" + " -O " + media['id_str'] + ".jpg")

# 100なら次ページを取得
while len(timelines) == count:
    last_id = timelines[-1].id
    timelines = api.user_timeline(screen_name=screen_name, count=count, max_id=last_id-1)
    for tl in timelines:
        if not 'media' in tl._json['entities']:
            continue
        medias = tl._json['entities']['media']
        for media in medias:
            print("wget \"" + media['media_url_https'] + "?format=jpg&name=4096x4096\"" + " -O " + media['id_str'] + ".jpg")

 上記では 1ツイートに複数画像に対応していなかったので下記で修正。
 extended_entitiesの mediaを使う。
# 100件単位で取得
count = 100
timelines = api.user_timeline(screen_name=screen_name, count=count)
for tl in timelines:
    if not hasattr(tl, 'extended_entities'):
        continue
    if not 'media' in tl.extended_entities:
        continue
    medias = tl.extended_entities['media']
    for media in medias:
        print("curl \"" + media['media_url_https'] + "?format=jpg&name=4096x4096\"" + " -o "  + tl.id_str +"_"+ media['id_str'] + ".jpg")

# 100なら次ページを取得
while len(timelines) == count:
    last_id = timelines[-1].id
    timelines = api.user_timeline(screen_name=screen_name, count=count, max_id=last_id-1)
    for tl in timelines:
        if not hasattr(tl, 'extended_entities'):
            continue
        if not 'media' in tl.extended_entities:
            continue
        medias = tl.extended_entities['media']
        for media in medias:
            print("curl \"" + media['media_url_https'] + "?format=jpg&name=4096x4096\"" + " -o "  + tl.id_str +"_"+ media['id_str'] + ".jpg")

https://twitter.com/xxxxxxxxxxx/status/1111111111111111111
tweet = api.get_status(id="1111111111111111111", tweet_mode="extended")
client = tweepy.Client(bearer_token=bearer_token, consumer_key=consumer_key, consumer_secret=consumer_secret)
client.get_user(username=screen_name)

● bearer tokenの取得方法

 なんで tweepyライブラリで取得できる様になってないんだ?

 How to get Twitter bearer token by consumer key and consumer secret .

App-only authentication and OAuth 2.0 Bearer Token

echo -n consumer_key:consumer_secret | base64 -w

# Windows コマンドラインの場合は末尾の \を ^にする。
curl -X POST \
  -H "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" \
  -d "grant_type=client_credentials" \
  "https://api.twitter.com/oauth2/token"

{"token_type":"bearer","access_token":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}

 Authorization: Basicの値が無効な場合や間違っている場合
{"errors":[{"code":99,"message":"Unable to verify your credentials","label":"authenticity_token_error"}]}
CONSUMER_KEY="xvz1evFS4wEEPTGEFPHBog"
CONSUMER_SECRET="L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg"

echo -n $CONSUMER_KEY:$CONSUMER_SECRET | base64 -w0
# eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==

AUTH=`echo -n $CONSUMER_KEY:$CONSUMER_SECRET | base64 -w0`
echo $AUTH
# eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==

curl -X POST \
  -H "Authorization: Basic $AUTH" \
  -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" \
  -d "grant_type=client_credentials" \
  "https://api.twitter.com/oauth2/token"

# {"token_type":"bearer","access_token":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}
or
# {"errors":[{"code":99,"message":"Unable to verify your credentials","label":"authenticity_token_error"}]}


Tags: [Windows], [無人インストール]

●関連するコンテンツ(この記事を読んだ人は、次の記事も読んでいます)

Androidで DBのフレームワーク SQLDelightを使う方法、公式の手順だとエラーしか出ない罠
Androidで DBのフレームワーク SQLDelightを使う方法、公式の手順だとエラーしか出ない罠

  SQLDelightを Androidで使う方法

Androidで Twitter4Jを使って Twitterのユーザー タイムラインを丸っと取得する方法
Androidで Twitter4Jを使って Twitterのユーザー タイムラインを丸っと取得する方法

  Twitter4Jの Java ラッパでまるっと取得!ユーザーアカウントでのログインが必要

Androidの公式 Twitterライブラリで Twitterのユーザー タイムラインを丸っと取得する方法
Androidの公式 Twitterライブラリで Twitterのユーザー タイムラインを丸っと取得する方法

  Twitter Kit for Androidでまるっと取得!ユーザーアカウントでのログイン不要

.NET C#の Tweetinviライブラリで Twitterの投稿内容を投稿画像込みで丸っと取得する方法
.NET C#の Tweetinviライブラリで Twitterの投稿内容を投稿画像込みで丸っと取得する方法

  まるっと取得したかった!質問は受け付けない!

ちいかわの単行本を買ってみた!もちろん特装版!
ちいかわの単行本を買ってみた!もちろん特装版!

  特装版のカルタが怖いと話題のちいかわ単行本。

すみっコぐらし サンエックスの人気キャラクター お菓子のキッシュシュクレ(タルト)、フィナンシェ
すみっコぐらし サンエックスの人気キャラクター お菓子のキッシュシュクレ(タルト)、フィナンシェ

  すみっコぐらしshop東京駅店 東京キャラクターストリート 東京駅一番街に行ってみた

【全集中の呼吸】鬼滅の刃の食玩お菓子を買ったら報告するスレ、オマケシール集め【鬼殺隊】
【全集中の呼吸】鬼滅の刃の食玩お菓子を買ったら報告するスレ、オマケシール集め【鬼殺隊】

  【全買占め】「鬼滅の刃」ブームに乗っかって鬼滅のお菓子を根こそぎ買い占め、これは戦争だ【在庫滅殺】

【我が道を】遂にガチの食玩にも手を出してしまった。。。Re:ゼロから始める異世界生活ウエハース vol.3【突き進むのみ】
【我が道を】遂にガチの食玩にも手を出してしまった。。。Re:ゼロから始める異世界生活ウエハース vol.3【突き進むのみ】

  【レムは俺の嫁】レムが主役のアニメ、リゼロ【エミリアは脇役】

テレビアニメ ご注文はうさぎですか? 通称「ごちうさ」のフィギュアを買ったのでレビュー
テレビアニメ ご注文はうさぎですか? 通称「ごちうさ」のフィギュアを買ったのでレビュー

  ごちうさのスペシャル フィギュア チノ リゼ シャロを買ったのでレビュー、UFOキャッチャー景品




[HOME] | [BACK]
リンクフリー(連絡不要、ただしトップページ以外は Web構成の変更で移動する場合があります)
Copyright (c) 2022 FREE WING,Y.Sakamoto
Powered by 猫屋敷工房 & HTML Generator

http://www.neko.ne.jp/~freewing/software/twitter_api_get_whole_tweet/