0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

I want to switch profile images in night mode on Twitter at night. (#Python script example of updating profile image with #Twitter # API)

Last updated at Posted at 2019-04-14

config.py

 CONSUMER_KEY = '' 
 CONSUMER_SECRET = '' 
 ACCESS_TOKEN = '' 
 ACCESS_TOKEN_SECRET = '' 
 
 

# twitterauth.py

 #!/usr/bin/env python3 
 
 import os, config 
 from requests_oauthlib import OAuth1Session 
 
 if os.environ.get('TWITTER_CONSUMER_KEY'): 
 CONSUMER_KEY = os.environ.get('TWITTER_CONSUMER_KEY') 
 CONSUMER_SECRET = os.environ.get('TWITTER_CONSUMER_SECRET') 
 ACCESS_TOKEN = os.environ.get('TWITTER_ACCESS_TOKEN') 
 ACCESS_TOKEN_SECRET = os.environ.get('TWITTER_ACCESS_TOKEN_SECRET') 
 else: 
 CONSUMER_KEY = config.CONSUMER_KEY 
 CONSUMER_SECRET = config.CONSUMER_SECRET 
 ACCESS_TOKEN = config.ACCESS_TOKEN 
 ACCESS_TOKEN_SECRET = config.ACCESS_TOKEN_SECRET 
 
 def twitter(): 
 return OAuth1Session(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET) 
 
 
 
 

Script

Specify the file path of the image and base64 encode and pass it as a string to the API.

 #!/usr/bin/env python3 
 
 # https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile_image.html 
 
 # The avatar image for the profile, base64-encoded. Must be a valid GIF, JPG, or PNG image of less than 700 kilobytes in size. Images with width larger than 400 pixels will be scaled down. Animated GIFs will be converted to a static GIF of the first frame, removing the animation. 
 
 import json, twitterauth, base64, sys 
 
 twitter = twitterauth.twitter() 
 
 image_path = sys.argv[1] 
 
 with open(image_path, "rb") as image_file: 
 image_encoded_string = base64.b64encode(image_file.read()) 
 
 api_url = 'https://api.twitter.com/1.1/account/update_profile_image.json' 
 
 params = { 
 "image": image_encoded_string 
 } 
 
 response = twitter.post(api_url, params=params) 
 
 print(json.dumps(response.json())) 
 
 
 

EXE

 $ ./update-profile.py image/profile.jpg 
 {"id": 473780756, "id_str": "473780756", "name": "Rails\u6b744\u5e74\u30a8\u30f3\u30b8\u30cb\u30a2\u3092\u304a\u63a2\u3057\u306e\u65b9\u306f\u3053\u3061\u3089\u307e\u3067@\u7a32\u6d66\u60a0\u99ac", "screen_name": "YumaInaura", "location": null, "description": "\u6b21\u306e\u304a\u4ed5\u4e8b\u63a2\u3057\u4e2d / Rails\u696d\u52d9\u7d04\u56db\u5e74 / \u73fe\u5728\u56db\u793e\u76f8\u8ac7\u4e2d / \u30ea\u30e2\u30fc\u30c8\u512a\u5148 / \u5927\u962a / Ruby / Perl / Shell / BigQuery / MySQL / Linux / Apache / ansible / Jenkins etc .. / \u8a73\u7d30\u306fWantedly\u3067 / Twitter DM\u53ef", "url": null, "entities": {"description": {"urls": []}}, "protected": false, "followers_count": 593, "friends_count": 0, "listed_count": 30, "created_at": "Wed Jan 25 09:59:57 +0000 2012", "favourites_count": 27660, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 41139, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/1117233785987158016/1rvLg75w_normal.jpg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/1117233785987158016/1rvLg75w_normal.jpg", "profile_banner_url": "https://pbs.twimg.com/profile_banners/473780756/1552991452", "profile_link_color": "1B95E0", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": false, "default_profile": false, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null, "translator_type": "none"} 
 

image

 $ ./update-profile.py image/profile_sleepy.jpg 
 {"id": 473780756, "id_str": "473780756", "name": "Rails\u6b744\u5e74\u30a8\u30f3\u30b8\u30cb\u30a2\u3092\u304a\u63a2\u3057\u306e\u65b9\u306f\u3053\u3061\u3089\u307e\u3067@\u7a32\u6d66\u60a0\u99ac", "screen_name": "YumaInaura", "location": null, "description": "\u6b21\u306e\u304a\u4ed5\u4e8b\u63a2\u3057\u4e2d / Rails\u696d\u52d9\u7d04\u56db\u5e74 / \u73fe\u5728\u56db\u793e\u76f8\u8ac7\u4e2d / \u30ea\u30e2\u30fc\u30c8\u512a\u5148 / \u5927\u962a / Ruby / Perl / Shell / BigQuery / MySQL / Linux / Apache / ansible / Jenkins etc .. / \u8a73\u7d30\u306fWantedly\u3067 / Twitter DM\u53ef", "url": null, "entities": {"description": {"urls": []}}, "protected": false, "followers_count": 593, "friends_count": 0, "listed_count": 30, "created_at": "Wed Jan 25 09:59:57 +0000 2012", "favourites_count": 27660, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 41139, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/1117233922763411457/9A3lowvf_normal.jpg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/1117233922763411457/9A3lowvf_normal.jpg", "profile_banner_url": "https://pbs.twimg.com/profile_banners/473780756/1552991452", "profile_link_color": "1B95E0", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": false, "default_profile": false, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null, "translator_type": "none"} 
 

image

sample Images

Be careful because it is rather strict such as capacity and size restrictions.

image

image

Scheduled execution

Turn the cron on the server and so on.

Original by Github issue

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

Twitter

0
0
0

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?