Skip to main content

A simple Python wrapper for Twitter API v2 ✨ 🍰 ✨

Project description

python-twitter

A simple Python wrapper around for Twitter API v2 :sparkles: :cake: :sparkles:.

v2 Build Status Codecov PyPI

Introduction

Twitter has published new version Twitter API V2 for developer at Aug 13, 2020.

This library provides a service to easily use this new version Twitter API.

Documentation

You can get all api description and update at Twitter API v2: Early Access.

Library docs site on here

Installing

You can install this library easily by pypi:

$ pip install python-twitter-v2

Code is hosted at https://github.com/sns-sdks/python-twitter.

Checkout latest development version with:

$ git clone https://github.com/sns-sdks/python-twitter.git
$ cd python-twitter

Install dependencies with:

$ make env

Run tests with:

$ make test

Run tests with coverage:

$ make cov-term
$ make cov-html

Using

The API is exposed via the pytwitter.Api class.

INSTANTIATE

You can initialize with an bearer token:

>>> from pytwitter import Api
>>> api = Api(bearer_token="Your bearer token")

With user context token:

>>> api = Api(
        consumer_key="consumer key",
        consumer_secret="consumer secret",
        access_token="access token",
        access_secret="access secret"
    )

Or with authorize by user:

>>> api = Api(consumer_key="consumer key",consumer_secret="consumer secret",oauth_flow=True)
# get url for user to authorize
>>> api.get_authorize_url()
# copy the response url
>>> api.generate_access_token("https://localhost/?oauth_token=oauth_token&oauth_verifier=oauth_verifier")
{'oauth_token': 'oauth_token',
 'oauth_token_secret': 'oauth_token_secret',
 'user_id': '123456',
 'screen_name': 'screen name'}

Users-lookup

You can get information about a user or group of users, specified by a user ID or a username.

Get group of users:

# By ids
>>> api.get_users(ids=["783214", "2244994945"])
Response(data=[User(id='2244994945', name='Twitter Dev', username='TwitterDev'), User(id='783214', name='Twitter', username='Twitter')])

# By username
>>> api.get_users(usernames="Twitter,TwitterDev")
Response(data=[User(id='2244994945', name='Twitter Dev', username='TwitterDev'), User(id='783214', name='Twitter', username='Twitter')])

Get single user:

# By id
>>> api.get_user(user_id="783214")
Response(data=User(id='783214', name='Twitter', username='Twitter'))

# By username
>>> api.get_user(username="Twitter")
Response(data=User(id='783214', name='Twitter', username='Twitter'))

Get user following:

>>> api.get_following(user_id="2244994945", max_results=5)
Response(data=[User(id='459860328', name='julie✨', username='JulieMendoza206'), User(id='273830767', name='🄿🅄🅂🄷', username='rahul_pushkarna')...])

Get user followers:

>>> api.get_followers(user_id="2244994945", max_results=5)
Response(data=[User(id='715131097332518912', name='Daniel', username='RGIDaniel'), User(id='1176323137757048832', name='Joyce Wang', username='joycew67')...])

You can follow or unfollow user if you have OAuth 1.0a User context.

follow user:

>>> api.follow_user(user_id="123456", target_user_id="654321")
{'data': {'following': True, 'pending_follow': False}}

unfollow user:

>>> api.unfollow_user(user_id="123456", target_user_id="654321")
{'data': {'following': False}}

Tweets-lookup

You can get information about a tweet or group of tweets by tweet id(s).

Get single tweet:

>>> api.get_tweet("1354143047324299264", expansions=["attachments.media_keys"], media_fields=["type","duration_ms"])
Response(data=Tweet(id=1354143047324299264, text=Academics are one of the biggest groups using...))

Get group of tweets:

>>> api.get_tweets(["1261326399320715264","1278347468690915330"],expansions="author_id",tweet_fields=["created_at"], user_fields=["username","verified"])
Response(data=[Tweet(id=1261326399320715264, text=Tune in to the @MongoDB @Twitch stream...), Tweet(id=1278347468690915330, text=Good news and bad news: 2020 is half over)])

Timelines

You can get target user timeline tweets by user id.

Get timelines:

>>> api.get_timelines(user_id="2244994945")
Response(data=[Tweet(id=1364275610764201984, text=If you're newly approved for the Academic...), Tweet(id=1362876655061073928, text=From our living rooms to yours 🐱‍💻🛋️Our...), Tweet(id=1362439338978467841, text=“To quote my creator Jerome Gangneux, I always...), Tweet(id=1362439338169016324, text=“In the 20th century, managers managed humans,...), Tweet(id=1362439336910675970, text=Meet one of the useful Twitter bots out there:...), Tweet(id=1359912509940011010, text=Valentine’s Day is approaching! 💙 Over the...), Tweet(id=1359554366051504129, text=Go ahead, follow another puppy account. We...), Tweet(id=1357371424487268354, text=Learn how academics can get historical Tweets...), Tweet(id=1356991771553583106, text=Who knew an API could be delicious?...), Tweet(id=1354215875998437376, text=RT @TwitterOSS: Today we’re happy to share...)])

You can get tweets which mention target user by user id.

Get mention tweets:

>>> api.get_mentions(user_id="2244994945")
Response(data=[Tweet(id=1364407587207213056, text=@scottmathson @TwitterDev What would you want...), Tweet(id=1364398068313903104, text=@Twitter should consider supporting...), Tweet(id=1364377794327633925, text=@sugan2424 @TwitterDev @threadreaderapp You...), Tweet(id=1364377404156772352, text=@TwitterDev What kind of tweet / attachment is...), Tweet(id=1364373969852366849, text= Thirdly, that @Twitter, @Twittersafety,...), Tweet(id=1364367885582352386, text=@Twitter @TwitterSafety @TwitterDev @jack...), Tweet(id=1364366114998870016, text=I have mixed feelings about @Twitter /...), Tweet(id=1364364744916951040, text=@Casanovacane @jack @TwitterDev can we get a...), Tweet(id=1364359199795240961, text=@TwitterDev @suhemparack A Blue app going to...), Tweet(id=1364338409494503425, text=@FairyMaitre @TwitterDev tkt)])

Search Tweets

Search tweets has two type. For standard project, you can use recent api to search tweets from the last seven days. If you have Academic Research Project, you can use full-archive api with query type all.

Search by recent tweets:

>>> api.search_tweets(query="python")
Response(data=[Tweet(id=1364512148865564675, text=RT @jesss_codes: Your resume: Git SSL Vue CSS...), Tweet(id=1364512106385702914, text=RT @theweeflea: Sturgeon goes on TV to declare...), Tweet(id=1364512102606467074, text=RT @tkEzaki:...), Tweet(id=1364512092343070721, text=RT @ore57436902: #Python #pyxel #ドルアーガの塔...), Tweet(id=1364512076601856007, text=RT @shosen_bt_pc:...), Tweet(id=1364512071866605568, text=RT @CatherineAdenle: 6 ways learning coding can...), Tweet(id=1364512071614889987, text=RT @giswqs: #geemap v0.8.11 has been released....), Tweet(id=1364512066770509824, text=RT @Akpanannang: Today when coming out from the...), Tweet(id=1364512053252284419, text=RT @HarbRimah: New Off-the-Shelf (OTS) Datasets...), Tweet(id=1364512030800171011, text=RT @gzadkowski: Day 5 - #100DaysOfCode...)])

Search by full-archive tweets:

>>> api.search_tweets(query="python", query_type="all")
Response(data=[Tweet(id=1364512148865564675, text=RT @jesss_codes: Your resume: Git SSL Vue CSS...), Tweet(id=1364512106385702914, text=RT @theweeflea: Sturgeon goes on TV to declare...), Tweet(id=1364512102606467074, text=RT @tkEzaki:...), Tweet(id=1364512092343070721, text=RT @ore57436902: #Python #pyxel #ドルアーガの塔...), Tweet(id=1364512076601856007, text=RT @shosen_bt_pc:...), Tweet(id=1364512071866605568, text=RT @CatherineAdenle: 6 ways learning coding can...), Tweet(id=1364512071614889987, text=RT @giswqs: #geemap v0.8.11 has been released....), Tweet(id=1364512066770509824, text=RT @Akpanannang: Today when coming out from the...), Tweet(id=1364512053252284419, text=RT @HarbRimah: New Off-the-Shelf (OTS) Datasets...), Tweet(id=1364512030800171011, text=RT @gzadkowski: Day 5 - #100DaysOfCode...)])

Hide reply

This api need user OAuth 1.0a User context.

You can hide reply tweet which belong to a conversation initiated by you.

>>> api.hidden_reply(tweet_id="tweet id")

You can unhide a reply tweet by api:

>>> api.hidden_reply(tweet_id="tweet id", hidden=False)

Streaming API

For Streaming, this provide StreamApi independent. Same as main Api, You need initial it first.

>>> from pytwitter import StreamApi
>>> stream_api = StreamApi(bearer_token="bearer token")
# or use consumer key and secret
>>> stream_api = StreamApi(consumer_key="consumer key", consumer_secret="consumer secret")

For Sample Stream tweets, You can use sample_stream function to build a connection.

>>> stream_api.sample_stream()

For Search Stream, You can point your rules.

Get your current rules.

>>> stream_api.get_rules()
Response(data=[StreamRule(id='1369580714056843266', value='twitter api ')])

Delete You rules.

>>> stream_api.manage_rules(rules={"delete": {"ids": ["1369580714056843266"]}})
Response(data=[])

Add new rules. If you set dry_run to True, will only validate rules, and not create them.

>>> np = {
        "add": [
            {"value": "cat has:media", "tag": "cats with media"},
            {"value": "cat has:media -grumpy", "tag": "happy cats with media"}
        ]
     }
>>> stream_api.manage_rules(rules=np, dry_run=True)
Response(data=[StreamRule(id='1370406958721732610', value='cat has:media -grumpy'), StreamRule(id='1370406958721732609', value='cat has:media')])

Then you can use search_stream to get tweets match your rules.

>>> stream_api.search_stream()

You can go to the Example folder for streaming examples.

TODO

  • More Api waiting twitter

Project details


Download files

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

Source Distribution

python-twitter-v2-0.3.3.tar.gz (23.4 kB view details)

Uploaded Source

Built Distribution

python_twitter_v2-0.3.3-py3-none-any.whl (23.2 kB view details)

Uploaded Python 3

File details

Details for the file python-twitter-v2-0.3.3.tar.gz.

File metadata

  • Download URL: python-twitter-v2-0.3.3.tar.gz
  • Upload date:
  • Size: 23.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.6 CPython/3.9.5 Linux/5.4.0-1047-azure

File hashes

Hashes for python-twitter-v2-0.3.3.tar.gz
Algorithm Hash digest
SHA256 a9cc9eb1d77c8c37bf98903aa9934b99c0f2994da7bee790212630f4783b4826
MD5 91db57fe1131a1522d8916449e461285
BLAKE2b-256 53472b65c496b2cd2846c8de91501bbfc19c9cde52a39c309088bff41afa5fe7

See more details on using hashes here.

File details

Details for the file python_twitter_v2-0.3.3-py3-none-any.whl.

File metadata

  • Download URL: python_twitter_v2-0.3.3-py3-none-any.whl
  • Upload date:
  • Size: 23.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.6 CPython/3.9.5 Linux/5.4.0-1047-azure

File hashes

Hashes for python_twitter_v2-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d66bb7eba4c15abaf5d68540137bc0c46e7c4d2f4dcb20447464be083d8bdd5b
MD5 a83dc916d1db7950923791105a2d3e7c
BLAKE2b-256 c02675d0c899069ffdc99bf0c16caede2c08ac7a1e25689c825832aea0ec0b70

See more details on using hashes here.

Supported by

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