Skip to main content

Twitter API

Project description

Complete implementation of the undocumented Twitter API

Includes tools to scrape, automate, and search twitter

Installation

 from twitter.account import Account

 username, password = ..., ...
 account = Account(username, password)

 account.create_poll('test poll 123', ['hello', 'world', 'foo', 'bar'], 10080)

 # DM 1 user
 account.dm([123], 'hello world', filename='test.png')

 # DM group of users
 account.dm([123, 234, 345], 'foo bar', filename='test.mp4')

 # schedule a tweet (date str or timestamp)
 account.schedule_tweet('scheduled hello', 1679912795, media=['test.jpg'])

 # schedule a reply tweet (date str or timestamp)
 account.schedule_tweet('scheduled world', '2023-03-25 19:11', media=['test.jpg'], reply_to=645)

 account.unschedule_tweet(321)

 # tweets
 account.tweet('test 123')
 account.tweet('test 234', media=['test.mp4'])
 account.tweet('test 345', media=['test.jpg', 'test.png', 'test.jpeg', 'test.jfif'])
 account.tweet('test 456', media=[{'file': 'test.jpeg', 'tagged_users': [123234345456], 'alt': 'some image'}])
 account.untweet(123)
 account.retweet(1633609779745820675)
 account.unretweet(1633609779745820675)
 account.quote(1633609779745820675, 'elonmusk', 'test 123')
 account.reply(1633609779745820675, 'test 123')
 account.like(1633609779745820675)
 account.unlike(1633609779745820675)
 account.bookmark(1633609779745820675)
 account.unbookmark(1633609779745820675)
 account.pin(1635479755364651008)
 account.unpin(1635479755364651008)

 # users
 account.follow(50393960)
 account.unfollow(50393960)
 account.mute(50393960)
 account.unmute(50393960)
 account.enable_notifications(50393960)
 account.disable_notifications(50393960)
 account.block(50393960)
 account.unblock(50393960)

 # other
 account.stats(50393960)

 # user profile
 account.update_profile_image('test.jpg')
 account.update_profile_banner('test.png')
 account.update_profile_info(name='Foo Bar', description='test 123', location='Victoria, BC')

 # topics
 account.follow_topic(808713037230157824)
 account.unfollow_topic(808713037230157824)

 # lists
 account.create_list('My List', 'description of my list', private=False)
 account.update_list(543, 'My Updated List', 'some updated description', private=False)
 account.update_list_banner(543, 'test.png')
 account.delete_list_banner(543)
 account.add_list_member(543, 50393960)
 account.remove_list_member(543, 50393960)
 account.delete_list(543)
 account.pin_list(543)
 account.unpin_list(543)

 # refresh all pinned lists in this order
 account.update_pinned_lists([543, 432, 321])

 # unpin all lists
 account.update_pinned_lists([])

 # example configuration
 account.update_settings({
     "address_book_live_sync_enabled": False,
     "allow_ads_personalization": False,
     "allow_authenticated_periscope_requests": True,
     "allow_dm_groups_from": "following",
     "allow_dms_from": "following",
     "allow_location_history_personalization": False,
     "allow_logged_out_device_personalization": False,
     "allow_media_tagging": "none",
     "allow_sharing_data_for_third_party_personalization": False,
     "alt_text_compose_enabled": None,
     "always_use_https": True,
     "autoplay_disabled": False,
     "country_code": "us",
     "discoverable_by_email": False,
     "discoverable_by_mobile_phone": False,
     "display_sensitive_media": False,
     "dm_quality_filter": "enabled",
     "dm_receipt_setting": "all_disabled",
     "geo_enabled": False,
     "include_alt_text_compose": True,
     "include_mention_filter": True,
     "include_nsfw_admin_flag": True,
     "include_nsfw_user_flag": True,
     "include_ranked_timeline": True,
     "language": "en",
     "mention_filter": "unfiltered",
     "nsfw_admin": False,
     "nsfw_user": False,
     "personalized_trends": True,
     "protected": False,
     "ranked_timeline_eligible": None,
     "ranked_timeline_setting": None,
     "require_password_login": False,
     "requires_login_verification": False,
     "sleep_time": {
         "enabled": False,
         "end_time": None,
         "start_time": None
     },
     "translator_type": "none",
     "universal_quality_filtering_enabled": "enabled",
     "use_cookie_personalization": False,
 })

 # example configuration
 account.update_search_settings({
     "optInFiltering": True,  # filter out nsfw content
     "optInBlocking": True,  # filter out blocked accounts
 })

 ## account.change_password('old password', 'new password')
 ## account.logout_all_sessions()

Scraping

Get all user/tweet data

from twitter.scraper import Scraper

username, password = ..., ...
scraper = Scraper(username, password)  # session

####### User Data ########
users = scraper.user_by_screen_name(['bob123', 'jim456', 'stanley789'])
tweets = scraper.tweets([123, 234, 345])
likes = scraper.likes([123, 234, 345])
tweets_and_replies = scraper.tweets_and_replies([123, 234, 345])
media = scraper.media([123, 234, 345])
following = scraper.following([123, 234, 345])
followers = scraper.followers([123, 234, 345])

######## Tweet Data ########
tweets_by_ids = scraper.tweets_by_rest_id([456, 567, 678])
tweets_details = scraper.tweets_details([456, 567, 678])
retweeters = scraper.retweeters([456, 567, 678])
favoriters = scraper.favoriters([456, 567, 678])

scraper.download_media([456, 567, 678])

Search

from twitter.search import search

search(
    '(#dogs OR #cats) min_retweets:500',
    'min_faves:10000 @elonmusk until:2023-02-16 since:2023-02-01',
    'brasil portugal -argentina',
    'paperswithcode -tensorflow -tf',
    'skateboarding baseball guitar',
    'cheese bread butter',
    'ios android',
)

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

twitter-api-client-0.4.8.tar.gz (30.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

twitter_api_client-0.4.8-py3-none-any.whl (31.5 kB view details)

Uploaded Python 3

File details

Details for the file twitter-api-client-0.4.8.tar.gz.

File metadata

  • Download URL: twitter-api-client-0.4.8.tar.gz
  • Upload date:
  • Size: 30.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.0

File hashes

Hashes for twitter-api-client-0.4.8.tar.gz
Algorithm Hash digest
SHA256 24291da7a7b932adb95d929124bf157be0fb6f54494bc85c02ce0acc2f702a49
MD5 94288927cfb603f2f0fbd65427c613c2
BLAKE2b-256 510105ce6f29c2cfc4d1fdbbe459b7eaee3a78972890ab7d62c34d63d7072589

See more details on using hashes here.

File details

Details for the file twitter_api_client-0.4.8-py3-none-any.whl.

File metadata

File hashes

Hashes for twitter_api_client-0.4.8-py3-none-any.whl
Algorithm Hash digest
SHA256 8cfc47edd176d1b86835e64cb54c2de00efae4f3d363419f36b59f12357331e8
MD5 1543b5fc4402b202b5184983f462a8ec
BLAKE2b-256 78c2a9810e721f9370eb2456c0a907c4ab6ce0d8dd105aae60f17807c8784a8e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page