1. 程式人生 > 其它 >[twitter spider] Python 使用推特開發者賬號應用+tweepy api,採集獲取推特資料

[twitter spider] Python 使用推特開發者賬號應用+tweepy api,採集獲取推特資料

技術標籤:Python

# 申請 twitter 開發者帳號 & 應用 token
consumer_key = "b5n...W1c"
consumer_secret = "RGOGO...rbGvh"
access_token = "10177...9Gwc5"
access_token_secret = "0ugoL...WsgxW"

# 填寫twitter提供的開發Key和secret + 提交你的Key和secret
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)

# 獲取指定使用者資訊 api.get_user(username)

# Get the User object for twitter...
user = api.get_user('twitter')
# 使用者關注人
api.friends(username, count=10):
   
# 使用者粉絲
api.followers(username, count=10)

# 關鍵字搜尋

results = api.search(q=query, lang=language)

import tweepy

def twitter_user(username):
    """ 獲取 twitter 使用者資料"""
    user = api.get_user(username, timeout=100)
    print('------------- User ---------')
    user_info = {
        'id': user.id_str,
        'nickname': user.name,
        'location': user.location,
        'screen_name': user.screen_name,
        'intro': user.description,  # emojo表情 處理
        'protected': user.protected,
        'fans_num': user.followers_count,
        'focus_num': user.friends_count,
        'create_time': str(user.created_at),
        'verified': user.verified,
        'tweet_num': user.statuses_count,
        'photo': user.profile_image_url.replace('normal', '400x400'),  # profile_image_url_https
        'url': user.url,
    }

    # 下載頭像圖片
    try:
        save_path = config.STATIC_PIC_PATH + '/twitter_user/' + user_info['id'] + '.png'
        urllib.request.urlretrieve(user_info['photo'], os.path.join(save_path))
    except Exception as e:
        print('photo download Error: ', user_info, '\n', traceback.format_exc())

    # print(json.dumps(user_info, indent=4, ensure_ascii=False))
    return user_info

# 獲取指定使用者指定數量的發帖資料 tweets = api.user_timeline(username)

def twitter_tweet(username, count):
    """ twitter tweet data"""
    # tweets = api.user_timeline(username)
    for tweet in tweepy.Cursor(api.user_timeline, id=screen_name, tweet_mode='extended').items(count):            
        tweet_id = tweet.id_str
        pub_time = str(tweet.created_at)
        tool = tweet.source
        repost_num = tweet.retweet_count
        like_num = tweet.favorite_count
        content = tweet.full_text
        lang = tweet.lang

        #  圖片 & 視訊 處理  (1~4四張照片 或 一個視訊/GIF)
        media = tweet.entities.get('media')

        # 引用/轉推/回覆 過濾
        is_reply = tweet.in_reply_to_status_id_str    # 回覆  -- 若是回覆,原始推文ID, 不是則為 None
        is_quote = tweet.is_quote_status              # 引用  -- 是否引用推文
        is_retweet = tweet.retweeted_status

# 獲取指定使用者指定帖子id之後的發帖資料

for tweet in tweepy.Cursor(api.user_timeline, id=username, since_id=since_id, tweet_mode='extended').items():
    pass

參考:

https://github.com/tweepy/tweepy

https://tweepy.readthedocs.io/en/latest/

https://developer.twitter.com/en/support/twitter-api