Twitter for Python!

Overview

Tweepy: Twitter for Python!

Test Status Documentation Status PyPI Version Python Versions Coverage Status Discord Server

Installation

The easiest way to install the latest version from PyPI is by using pip:

pip install tweepy

You can also use Git to clone the repository from GitHub to install the latest development version:

git clone https://github.com/tweepy/tweepy.git
cd tweepy
pip install .

Alternatively, install directly from the GitHub repository:

pip install git+https://github.com/tweepy/tweepy.git

Python 3.6 - 3.9 are supported.

Links

Comments
  • 'NoneType' object has no attribute 'strip' exception in streaming.py

    'NoneType' object has no attribute 'strip' exception in streaming.py

    streaming.py threw the following exception:

    Traceback (most recent call last): File "./script.py", line 93, in stream.filter(track=['#programming'], languages=['en']) File "/usr/local/lib/python3.4/dist-packages/tweepy/streaming.py", line 428, in filter self._start(async) File "/usr/local/lib/python3.4/dist-packages/tweepy/streaming.py", line 346, in _start self._run() File "/usr/local/lib/python3.4/dist-packages/tweepy/streaming.py", line 286, in _run raise exception File "/usr/local/lib/python3.4/dist-packages/tweepy/streaming.py", line 255, in _run self._read_loop(resp) File "/usr/local/lib/python3.4/dist-packages/tweepy/streaming.py", line 298, in _read_loop line = buf.read_line().strip() AttributeError: 'NoneType' object has no attribute 'strip'

    Bug 
    opened by geransmith 52
  • Timeouts and Aborted Connections after running code for long times

    Timeouts and Aborted Connections after running code for long times

    I am using Twitter API to scan through tweets and users, but because of Twitter's API limits, scanning thousands of users/tweets can take hours. Fine. However, when I run Twitter API code through Python using Tweepy, after a few hours of the code running the code gets interrupted and I get one of two error messages:

    tweepy.error.TweepError: Failed to send request: ('Connection aborted.', error(54, 'Connection reset by peer'))

    Another error:

    tweepy.error.TweepError: Failed to send request: HTTPSConnectionPool(host='api.twitter.com', port=443): Read timed out. (read timeout=60)

    It seems Twitter has a timeout limit that stops access after a certain point? Or not? Is this a Twitter API issue, or a Tweepy one?

    This doesn't happen for small sizes, only when the code has to spend more than about an hour running. Of course one sees the problem with walking away from script that should take hours to run, only to come back and find that it's aborted partway through.

    No one seems to know why this happens. Posted on several forums and spoken to several people..Could be a bug.

    Bug Improvement Question Duplicate 
    opened by tednopple 47
  • Support for Twitter API v2

    Support for Twitter API v2

    ~~Now that the new Twitter API has been launched, support for it needs to be added in Tweepy.~~ ~~This is planned to be part of v4.0.~~

    ~~v3.10 will be released first, as the last version to support Python 2.7 (and probably Python 3.5). My goal is to get v3.10 out before the end of the year and then work on dropping support for Python 2.~~ v3.10 has been released now, and support for Python 2.7 and 3.5 has been dropped. ~~Afterwards, This will be the next priority, along with support for asyncio.~~

    Initial support for Twitter API v2 has been added with Tweepy v4.0. Support for additional endpoints and features have been added with Tweepy v4.1, v4.2, v4.3, v4.4, v4.5, and v4.6.

    Support for new endpoints and features will be tracked in new individual issues.

    Endpoints to support

    Tweets

    Filtered stream
    Hide replies
    Likes (lookup + manage)
    Manage Tweets
    • [X] DELETE /2/tweets/:id (https://github.com/tweepy/tweepy/commit/7884e3a7253d9a821ff46160ec0d3811f299327f)
    • [X] POST /2/tweets (https://github.com/tweepy/tweepy/commit/7884e3a7253d9a821ff46160ec0d3811f299327f)
    Retweets
    Search Tweets (full-archive + recent)
    Timelines
    Tweet counts
    Tweet lookup
    Volume streams

    Users

    Blocks (lookup + manage)
    Follows (lookup + manage)
    Mutes (lookup + manage)
    User lookup

    Spaces

    Search Spaces
    • [X] GET /2/spaces/search (https://github.com/tweepy/tweepy/commit/5c688922cf0f8e89d401ea5108b06aaa8c12d71b)
    Spaces lookup (buyers, Tweets)
    • [X] GET /2/spaces (https://github.com/tweepy/tweepy/commit/5c688922cf0f8e89d401ea5108b06aaa8c12d71b)
    • [X] GET /2/spaces/:id (https://github.com/tweepy/tweepy/commit/5c688922cf0f8e89d401ea5108b06aaa8c12d71b)
    • [X] GET /2/spaces/:id/buyers (https://github.com/tweepy/tweepy/commit/8bf58ca5754f72292d1d86367a02778af7a44f20)
    • [X] GET /2/spaces/:id/tweets (https://github.com/tweepy/tweepy/commit/c8d5d9ad2c2b3c6b58b987286726cad467ce888f)
    • [X] GET /2/spaces/by/creator_ids (https://github.com/tweepy/tweepy/commit/5c688922cf0f8e89d401ea5108b06aaa8c12d71b)

    Lists (lookup + manage)

    List Tweets lookup
    List follows
    List lookup
    • [X] GET /2/lists/:id (https://github.com/tweepy/tweepy/commit/0aa2366a875464756507abf42709a3db676f4cee)
    • [X] GET /2/users/:id/owned_lists (https://github.com/tweepy/tweepy/commit/0aa2366a875464756507abf42709a3db676f4cee)
    List members
    Manage Lists
    • [X] DELETE /2/lists/:id (https://github.com/tweepy/tweepy/commit/b1342bfc998bee334437f2b7a8d2aef4df7c3838)
    • [X] PUT /2/lists/:id (https://github.com/tweepy/tweepy/commit/b1342bfc998bee334437f2b7a8d2aef4df7c3838)
    • [X] POST /2/lists (https://github.com/tweepy/tweepy/commit/b1342bfc998bee334437f2b7a8d2aef4df7c3838)
    Pinned Lists

    Compliance

    Batch Compliance

    Addendum

    Support for Labs (~~https://developer.twitter.com/en/products/labs~~)
    COVID-19 stream (#1790)
    Additional Resources

    https://developer.twitter.com/en/docs/twitter-api/early-access https://developer.twitter.com/en/docs/twitter-api/migrate https://developer.twitter.com/en/products/twitter-api/early-access/guide https://blog.twitter.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html https://twittercommunity.com/t/announcing-early-access-to-the-next-generation-of-the-twitter-api/139612

    https://twittercommunity.com/t/blocks-and-likes-endpoints-are-now-complete-on-the-twitter-api-v2/154434

    https://blog.twitter.com/developer/en_us/topics/tools/2021/shape-the-future-of-twitter-spaces

    https://twittercommunity.com/t/announcing-oauth-2-0-beta/159189

    Old Postscript

    I'd like to apologize for the delay in responding to @andypiper and others about this in #1345, #1396, and #1423, as well as on Discord. I've (I think understandably) fallen behind a bit this year in my plans for Tweepy and in keeping up with issues and Discord messages, but I'm working on catching back up.

    Feature Task API 
    opened by Harmon758 41
  • Support premium search APIs

    Support premium search APIs

    With recent API updates, both basic and premium accounts have access to full-history search as long as a development environment is created and specified by the API account holder. Will tweepy be able to access this feature sometime in the near future?

    Feature 
    opened by ddefranza 40
  • Video upload (take 2)

    Video upload (take 2)

    This is a more up to date version of https://github.com/tweepy/tweepy/pull/672 originally crafted by @Choko256 and @fitnr.

    The original description from the previous PR:

    As I mentioned in #655, this is an alternate way of adding video upload. The media_upload method gets a conditional, with smaller images routed to 'normal' upload, and larger images and videos chunked upload. I also moved upload limits to a class variable, to make them easier to change if the need arises.

    This also fixes from unicode errors as flagged by @jeremylow.

    Feature Improvement Stale 
    opened by jamesandres 39
  • Tweepy not getting full text

    Tweepy not getting full text

    Hey guys, just a heads up that currently the library is not getting the new tweets. According to the following example:

    https://developer.twitter.com/en/docs/tweets/tweet-updates#chars280

    Notice that currently tweepy is retrieving only 140 chars and then adding "..." at the end. Any of you guys now if there is any easy fix for that? Or is this a problem from Twitter?

    Question Invalid API Stale 
    opened by manoelhortaribeiro 37
  • Update search to use V1.1 API methods and results

    Update search to use V1.1 API methods and results

    Initial changes required to make search work with the Twitter V1 API. Please refer to the Twitter 1.1 API search/tweets documentation and errata for implementation details.

    Please review and comment. This works in my limited testing, but I cannot run the full test suite in my environment.

    • search() fix path (URL) to use 1.1 API url
    • search() allowed_param changes: rpp -> count, adding include_entities; allowed_param entries now in alphabetical order.
    • search_api flag no longer needed or used.
    • SearchResults class: Pull list results from ['statuses'], use parse_datetime() rather than parse_search_datetime() since the date format is now standardized.
    • utils.parse_search_datetime() no longer used and has been deleted.

    Cursor support

    search does not support reverse Cursor pagination at this time.

    Breaking changes

    • The parsed SearchResult structures have changed due to changes in the underlying API. models.SearchResult is now a subclass of models.Status -- the results list is now parsed as a list of models.Status objects, and the search metadata is contained in the search_metadata attribute of API.search()'s returned value.
    opened by inactivist 29
  • Retreive tweet full text when tweet_mode is extended

    Retreive tweet full text when tweet_mode is extended

    When tweet_mode is extended twitter api returns full text in full_text field instead of text.

    https://dev.twitter.com/overview/api/upcoming-changes-to-tweets

    Improvement Question Invalid API Stale 
    opened by ahuei123456 25
  • Direct Message API changes

    Direct Message API changes

    Twitter is deprecating some of it's REST API endpoints for Direct Messages on August 16, 2018 and replacing them with new endpoints that require changes in how data is sent, they will also return DMs with a different format. More details in the Direct Message Migration guide and in the announcement.

    Edit: new reminder from twitter: https://twittercommunity.com/t/reminder-site-streams-user-streams-and-legacy-dm-endpoints-will-be-sunset-august-16th/109482

    Bug Improvement API 
    opened by j-e-d 24
  • Adds video upload

    Adds video upload

    This squashes the changes in #929 down to a single commit, incorporating comments from @Harmon758.

    Some of this work is due @jamesandres and @Choko256.

    This is currently in draft because I have poor internet for the next week and testing video upload isn't feasible. We've waited five years, so another week should be fine. 😄

    Feature Improvement Documentation Tests 
    opened by fitnr 23
  • Connection broken: IncompleteRead

    Connection broken: IncompleteRead

    This happened and wasn't handled properly. Expected behaviour - reconnection

    Traceback (most recent call last):¡ãç°¡å
      File "./feeder.py", line 78, in <module>
        stream.filter(**filterargs)
      File "build/bdist.linux-x86_64/egg/tweepy/streaming.py", line 430, in filter
      File "build/bdist.linux-x86_64/egg/tweepy/streaming.py", line 346, in _start
      File "build/bdist.linux-x86_64/egg/tweepy/streaming.py", line 286, in _run
    requests.packages.urllib3.exceptions.ProtocolError: ('Connection broken: IncompleteRead(0 bytes read, 512 more expected)', IncompleteRead(0 bytes read, 512 more expected))
    
    Bug Duplicate 
    opened by truekonrads 23
  • What happened to the retry_count and and retry_errors parameters for Client vs API? I am trying to control retry count

    What happened to the retry_count and and retry_errors parameters for Client vs API? I am trying to control retry count

    For tweepy.API, the following attributes are available:

    - retry_count – Number of retries to attempt when an error occurs
    
    - retry_delay – Number of seconds to wait between retries
    
    - retry_errors – Which HTTP status codes to retry
    

    Were these removed for tweepy.Client?

    opened by josh-ashkinaze 0
  • Add timeout

    Add timeout

    https://github.com/tweepy/tweepy/issues/2024

    Adds a global timeout option to the BaseClient.

    I can also add an override at the method level to allow overriding the global timeout as well if desired. Also able to add the parameter to the StreamingClient if that is interesting to people as well. Keeping it simple in the mean time :)

    opened by Kennpow 0
  • Allow timeout on v2 Client requests

    Allow timeout on v2 Client requests

    Hi,

    I've been looking into some long running requests we've got, and noticed that the reason appears to be that Tweepy does not set (or allow you to set) a timeout on BaseClient.request in any way. This means that when doing simple things such as trying to get a user, we are waiting for 15 minutes.

    It would be great to have more control of the retries on the client and not get stuck for so long. I could make a PR to easily allow setting a global timeout on the client. Additionally we could update the existing methods to take in an override timeout as well if we wanted.

    opened by DashKenny 0
  • Add functions to handle subtitles with API 1.1

    Add functions to handle subtitles with API 1.1

    Added tweepy.api.create_media_subtitles to associate subtitles with a video Added tweepy.api.delete_media_subtitles to dissociate subtitles from a video and delete the subtitles

    Added tests.test_api.py::testmediasubtitles to test the above two functions

    opened by JoshSilverb 0
  • Oauth2 fails to authenticate

    Oauth2 fails to authenticate

    Hi,

    I have the same issue that was mentioned in issue #2014. It was closed but was not solved.

    After granting the app the permissions, the user is redirected to the callback url with two parameters: state and code. When passing the full URL to the fetch_token method:

    fetch_token("https://mydomain.tld/mycallbackuri/?state=CfVn3zt150Z673dUu8rKLDYvX&code=QlR2VjFxVTYXXXXXXXXXXXXXXXXXMTW5rc3VXXXXXXXXXXxExLOjE2Njg5ODI3MDUyNTI6MTowOmFjOjE")

    This error is returned: InvalidClientIdError: (invalid_request) Missing required parameter [code_verifier]

    I was digging a bit and fount this specific line in the stacktrace:

    File XXXXXXX/site-packages/tweepy/auth.py:217, in OAuth2UserHandler.fetch_token(self, authorization_response) return super().fetch_token( 218 "https://api.twitter.com/2/oauth2/token", 219 authorization_response=authorization_response, 220 auth=self.auth, 221 include_client_id=True, 222 code_verifier=self._client.code_verifier 223 )

    I can see that self._client.code_verifier is passed as code_verifier, but if I check the actual value of this variable is empty.

    Can't see what am I doing wrong? Or if this is an issue?

    opened by javinievas 4
Releases(v4.12.1)
  • v4.12.1(Nov 6, 2022)

    Bug Fixes

    • Add 1 second buffer to API v2 streaming timeout (51a5d61)
      • The keep-alive is often received after marginally longer than 20 seconds, causing unnecessary timeouts and reconnects with a timeout of exactly 20 seconds
    • Default AsyncBaseStream to abort closed SSL transports (#1904)
    • Warn when Tweet data is missing default edit_history_tweet_ids field (3dea0df, #1994)
    • Change initial network_error_wait to 0 for streaming (b18c1a6)
      • Attempt to reconnect immediately when established streaming connection drops

    Misc

    • Document limit and pagination_token parameters for Paginator and AsyncPaginator (e98ab02, bb934fc)
    • Use separate method to construct Response in Client and AsyncClient (#1997, 9983735)
    • Log streaming connection error exceptions (b7f02c6)
    • Add CITATION.cff (2547b44)
    • Add DOI badge to README (72a33c9)
    • Replace docs/requirements.txt with docs extra (0ccfe86)
    • Fix Intersphinx link to namedtuple in documentation for Response (352c74a)
    • Improve format of badges in README (d41c813)
    Source code(tar.gz)
    Source code(zip)
  • v4.12.0(Oct 28, 2022)

    New Features / Improvements

    • Add support for Direct Messages with Twitter API v2 (#1995)
      • Add DirectMessageEvent model
      • Add Client.get_direct_message_events, Client.create_direct_message, and Client.create_direct_message_conversation
      • Add AsyncClient.get_direct_message_events, AsyncClient.create_direct_message, and AsyncClient.create_direct_message_conversation
    • Add support for Python 3.11 (a391c66)
    • Add support for variants Media field (#1910, e31be15)

    Bug Fixes

    • Handle different method return types in API v2 pagination (#1843, #1861, 381bf91, 3874579)
    • Add missing angle bracket to string representation of ReferencedTweet (d4df069)

    Misc

    • Add documentation for edit_history_tweet_ids and edit_controls Tweet fields (2b1e159)
      • This documentation was previously missing from Twitter's API documentation
    • Fix class references in notes in documentation for AsyncClient methods (f737b87)
    • Fix signature of Client.get_quote_tweets in documentation (6f7de39)
    • Update actions/setup-python from v2 to v4 (f16b3dc, 0148be7)
    Source code(tar.gz)
    Source code(zip)
  • v4.11.0(Oct 24, 2022)

    New Features / Improvements

    • Add support for retrieving edited Tweet metadata
      • Add support for include_ext_edit_control parameter for API methods (e122f35, e736770)
      • Add support for edit_history_tweet_ids and edit_controls Tweet fields (#1979, a1c104f)
    • Add asynchronous.AsyncPaginator for pagination for AsyncClient (33e444a)
    • Add support for exclude parameter for get_quote_tweets (4f28bd8, 17e02b7, 48ebdb7)

    Bug Fixes

    • Handle 429 HTTP errors for streaming (#1982, #1986)
    • Lower API v2 streaming timeout to 20 seconds (#1986)
    • Regenerate Authorization header prior to any reconnection requests for AsyncStream (29bbb7b, a4c6325, 5ade386)
    • Use tuple for endpoint_parameters argument in API.indicate_direct_message_typing (396ab84)
    • Update models.List methods to pass keyword arguments to API methods (#1987)
    • Update models.List methods to use list ID instead of slug (73f6308)

    Misc

    • Log text of HTTP response when handling request error in AsyncBaseStream (51c3762)
    • Update signature for get_list_tweets in documentation (86577b1)
      • Add media_fields, place_fields, and poll_fields parameters
    • Add version changed directive to documentation for get_list_tweets (5cb2616)
    • Improve documentation for wait_on_rate_limit parameter for streaming (#1986)
    • Add release dates to changelog (f665ce6, eafa665, 3f0cc76)
    • Add sections for old and previously missing versions to changelog (6aa1b77)
    • Update cassettes for testing methods that return Tweet objects (872b33e)
    Source code(tar.gz)
    Source code(zip)
  • v4.10.1(Aug 23, 2022)

    Bug Fixes

    • Fix AsyncBaseClient rate limit handling (#1902)
    • Fix handling of StreamRule when passed in list to StreamingClient.delete_rules or AsyncStreamingClient.delete_rules (#1942)
    • Add support for media_fields, place_fields, and poll_fields parameters for Client.get_list_tweets and AsyncClient.get_list_tweets (#1931)
    • Ignore AsyncClient method parameters explicitly passed as None (#1944)

    Misc

    • Log text of HTTP response when handling request error in BaseStream (598ea64)
    • Update Requests documentation URL for Intersphinx linking (2c7213d)
    • Correct typo in documentation for StreamingClient and AsyncStreamingClient add_rules and delete_rules methods (#1937)
    Source code(tar.gz)
    Source code(zip)
  • v4.10.0(May 20, 2022)

    New Features / Improvements

    • Add asynchronous interfaces for Twitter API v2
      • Add asynchronous.AsyncClient (0aadd53)
        • Add async_lru as requirement for async extra
      • Add asynchronous.AsyncStreamingClient (9051ba6)
    • Add support for reverse chronological home timeline with Twitter API v2 (#1900)
      • Add Client.get_home_timeline and AsyncClient.get_home_timeline
    • Update the User-Agent header based on AsyncStream.user_agent even if AsyncStream.session is already initialized/set (096a62c)

    Twitter API Deprecations

    • Deprecate AsyncStream.sample and note deprecation of compliance messages for AsyncStream.filter (e043074, 1b77007)

    Misc

    • Update and improve various documentation and tests
    Source code(tar.gz)
    Source code(zip)
  • v4.9.0(May 5, 2022)

    New Features / Improvements

    • Add support for Direct Message typing indicator and read receipts (#1856)
      • Add API.indicate_direct_message_typing and API.mark_direct_message_read
    • Fallback to "detail" response value for HTTPException message (b6b8241)
    • Handle "error" key of response being a string in HTTPException (2da4452)

    Twitter API Deprecations

    • Deprecate Stream.sample and note deprecation of compliance messages for Stream.filter (#1876)

    Misc

    • Use setup.cfg for coverage.py configuration (e24bb2f)
      • Explicitly specify coverage >= 4.4.2 requirement for dev extra (b5bd35e)
    • Use setup.cfg for tox configuration (e24bb2f)
      • Update lower bound for dev extra tox requirement to >= 3.21.0 (ba6e6b1)
    • Remove tests_require from setup.py (2870031)
    • Stop creating universal wheels (9d93ec8)
    • Update and improve various documentation and tests
    Source code(tar.gz)
    Source code(zip)
  • v4.8.0(Mar 24, 2022)

    New Features / Improvements

    • Add support for Bookmarks with Twitter API v2 (#1848)
      • Add Client.remove_bookmark, Client.get_bookmarks, Client.bookmark
    • Add support for using OAuth 2.0 Authorization Code Flow with Client methods that require the authenticating user's ID (0157d0b)
      • Raise TypeError for those methods when the access token isn't set
    • Raise NotFound rather than HTTPException when encountering 404 response status codes in BaseClient.request (b6b8219)
    Source code(tar.gz)
    Source code(zip)
  • v4.7.0(Mar 17, 2022)

    New Features / Improvements

    • Add support for Quote Tweets lookup with Twitter API v2 (#1844)
      • Add Client.get_quote_tweets

    Python Backwards-Incompatible Changes

    • Drop support for Python 3.6, which has reached end-of-life status (#1788)

    Bug Fixes

    • Fix Client.follow to return response from Client.follow_user rather than None (0742f54)
    • Fix Client.unfollow to return response from Client.unfollow_user rather than None (c1787f0)

    Misc

    • Organize documentation arrangement and improve index / table of contents categorization (c5310d1)
    • Add documentation for API v2 models
      • Add documentation for List (360594b)
      • Add documentation for Media (c2dacc8)
      • Add documentation for Place (e3fa223)
      • Add documentation for Poll (61ed5d7)
      • Add documentation for Space (1a7ea1f)
      • Add documentation for Tweet (b9cef72)
      • Add documentation for ReferencedTweet (9a995b5)
      • Add documentation for User (aa3658e)
    • Use Read the Docs Sphinx search extension for documentation (72c7e01)
    • Add and improve API v2 examples (#1835, 6a6ef98)
    • Use dash instead of underscore for requests-oauthlib requirement (2c94758)
    • Optimize Tweet.referenced_tweets initialization (3299881)
    • Update and improve various documentation
    Source code(tar.gz)
    Source code(zip)
  • v4.6.0(Feb 24, 2022)

    This will be the last minor version to support Python 3.6 (#1788).

    New Features / Improvements

    • Add support for streaming with Twitter API v2 (86244c1)
      • Refactor Client and Stream to inherit from new BaseClient and BaseStream classes and add StreamingClient, StreamResponse, and StreamRule
    • Add support for new max_results and pagination_token parameters for Client.get_liking_users (bdd6b55)
    • Add support for new max_results and pagination_token parameters for Client.get_retweeters (3479e56)
    • Add support for new sort_order parameter for Client.search_all_tweets (bd202e5)
    • Add support for new sort_order parameter for Client.search_recent_tweets (8b47170)
    • Add Client.get_space_tweets (c8d5d9a)
    • Add Space.subscriber_count (1ffc8cd)
    • Use repr of text in Tweet.__repr__ (4e2997e)
      • This avoids including inconstant newlines, rather than escaped newlines, in the string representation of the Tweet object, making it more consistent
    • Override Mapping.__contains__ in DataMapping (9f10a58)
      • This allows membership tests to check for existence within data in Twitter API v2 models, rather than existence of the attribute at all
    • Initialize Stream.session within Stream.__init__ (80adf5b)
      • Update the user agent based on Stream.user_agent even if Stream.session is already initialized
    • Use oauthlib to create code challenge and verifier for PKCE (eb22416)
      • Explicitly specify oauthlib dependency requirement as >= 3.2.0 (fc0d967)
        • Update requests_oauthlib dependency requirement to >= 1.2.0 (dd7e2c9)

    Bug Fixes

    • Fix datetime endpoint parameter formatting in Client._make_request (#1793)

    Misc

    • Remove undocumented debug function (a702325)
    • Add logging documentation (7701506)
    • Update and improve various documentation
    Source code(tar.gz)
    Source code(zip)
  • v4.5.0(Jan 25, 2022)

    New Features / Improvements

    • Revamp authentication interface
      • Add support for OAuth 2.0 Authorization Code Flow with PKCE
      • Rename OAuthHandler to OAuth1UserHandler (fb6eb7d)
        • OAuthHandler is kept as a deprecated alias (cba7317)
      • Rename AppAuthHandler to Oauth2AppHandler (529d793)
        • AppAuthHandler is kept as a deprecated alias (d4ceb1a)
      • Rename OAuth2Bearer to OAuth2BearerHandler (0781fde)
      • Allow passing access token and secret directly to OAuth1UserHandler.__init__ (99f3583)
        • Note, this changes the callback parameter to be the fifth argument, positionally
      • Allow OAuth2BearerHandler to be used as auth parameter for API (5a2a3fc)
      • Remove AuthHandler (d600c4c)
      • Remove OAuth1UserHandler.get_xauth_access_token (8e2de9f)
      • Update and improve authentication documentation (f9a722b)
      • Other improvements and optimizations
    • Add Client.get_me (c49cbdf, 62b5b58, f6895d3, bb87b26)
    • Add support for Media.url (#1722)
    • Use requests exception to handle JSONDecodeError (b492b0a)
      • Update requests dependency requirement to >= 2.27.0 (ed66e8e)

    Bug Fixes

    • Fix Response.includes["polls"] not being Poll objects (#1733)
    • Fix Paginator handling of Client.get_all_tweets_count (#1761)

    Misc

    • Improve and optimize Model.__getstate__ (#1707)
    • Add API v2 examples to documentation (bbdbb7b)
    • Update and improve various documentation
    Source code(tar.gz)
    Source code(zip)
  • v4.4.0(Nov 17, 2021)

  • v4.3.0(Nov 3, 2021)

    New Features / Improvements

    • Add support for managing Tweets with Twitter API v2 (7884e3a)

    Misc

    • Document HTTPException attributes (c62c31a)
    • Add table to documentation mapping Client methods to Twitter API v2 endpoints (0572b03)
    • Add and improve examples
    • Revamp examples page in documentation
    • Update and improve various documentation and tests
    Source code(tar.gz)
    Source code(zip)
  • v4.2.0(Oct 29, 2021)

    New Features / Improvements

    • Add support for managing lists with Twitter API v2 (b1342bf)
    • Rename Client.follow and Client.unfollow to Client.follow_user and Client.unfollow_user, respectively (8f8de15)
      • Client.follow and Client.unfollow are kept as deprecated aliases
    • Add FAQ section in documentation
    • Update and improve various documentation and tests

    Twitter API Changes

    • Change state to optional parameter for Client.search_spaces (e61d5d6)

    Bug Fixes

    • Fix parsing of datetime strings for API v2 models with Python 3.6 (5bf2446)
    • Fix models missing an API instance attribute when using Cursor with pagination by ID (451e921)
    Source code(tar.gz)
    Source code(zip)
  • v4.1.0(Oct 7, 2021)

    New Features / Improvements

    • Add support for Python 3.10 (229b738)
      • Update minimum dev requirement version for tox to 3.14.0
    • Add support for Spaces (5c68892)
      • Add Space model
      • Add Client.search_spaces, Client.get_spaces, and Client.get_space
    • Add support for batch compliance (6ca75e1)
      • Add Client.get_compliance_jobs, Client.get_compliance_job, and Client.create_compliance_job
    • Add Client.get_muted (00cdab8)
    • Minor documentation corrections
    Source code(tar.gz)
    Source code(zip)
  • v4.0.1(Oct 1, 2021)

    Bug Fixes

    • Fix handling of strings passed as fields parameters for Client methods (d61a5d9)
    • Include unexpected parameters passed to Client methods in Twitter API request (618d1c2)
      • This future-proofs for new endpoint parameters
    • Stop checking parameter names when converting parameters passed to Client methods from datetimes to strings (1320a37)
      • This future-proofs for new endpoint parameters besides start_time and end_time that accept datetimes
    • Handle simplejson being installed when handling JSONDecodeError in HTTPException (586c162)

    Misc

    • Update documentation requirements (3fa38b6, 388e2f6, 4315ab0)
    • Remove nose usage from tests (b4c06a4)
    • Remove mock and nose from tests extra and requirements (0f071fd, b4c06a4)
    • Update and improve various documentation and tests
    Source code(tar.gz)
    Source code(zip)
  • v4.0.0(Sep 25, 2021)

    Major New Features / Improvements

    • Support Twitter API v2 (#1472, #1535)

      • Replace API v1.1 models in package namespace
    • Rework media uploading (#640, #1486, #1501)

    • Support asynchronous streaming (#732, #1491)

    • Rework API

      • Replace bind_api and APIMethod with API.request
        • Stop using property decorators for API methods
        • Use pagination decorator
      • Add requests.Session instance as API.session attribute (2f28757)
        • Initialize a single requests.Session instance per API instance, rather than for each request
      • Log warning when API.request is passed an unexpected keyword argument that isn't an endpoint parameter (c82d7ac)
      • Rename allowed parameters (allowed_param) to endpoint parameters (endpoint_parameters) (b4fc6a0)
      • Rename methods and method parameters (see Backwards-Incompatible Changes section)
      • Require parameters for methods (see Backwards-Incompatible Changes section)
      • Stop allowing arbitrary positional arguments for methods (see Backwards-Incompatible Changes section)
      • Remove unnecessary attributes and parameters (see Backwards-Incompatible Changes section)
      • Improve, optimize, and simplify API.request and other API methods
    • Rework streaming

      • StreamListener has been merged into Stream (see Backwards-Incompatible Changes section)
      • Stream data/event handling methods (i.e. those starting with on_) now log by default and disregard return values
      • Allow the stream to disconnect when any line of data is received, including keep-alive signals (#773, #897)
      • Remove, rename, and replace attributes, methods, and parameters (see Backwards-Incompatible Changes section)
      • Improve, optimize, and simplify Stream
    • Rework documentation

      • Automatically use docstrings for documentation
      • Use NumPy style docstrings
      • Use Intersphinx linking
      • Add tooltips for cross references using sphinx-hoverxref
      • Document Stream (18a6059)
      • Document models (0724060, 78a0c22)
      • Document pagination (695d531, 652fece)
      • Add table for API documentation (6db8e4c)
      • Separate documentation for exceptions (8a831b1)
      • Move changelog to documentation (fc98629)
      • Update, improve, and organize documentation
    • Rework exceptions

    Backwards-Incompatible Changes

    • Drop support for Python 2 (#1253, #1482)
    • Drop support for Python 3.5 (#1487)

    API

    • Rename API and models methods
      • API.blocks -> API.get_blocks (9541794)
      • API.blocks_ids -> API.get_blocked_ids (e241ca4)
      • API.destroy_direct_message -> API.delete_direct_message (2731fc9)
        • DirectMessage.destroy -> DirectMessage.delete (2731fc9)
      • API.favorites -> API.get_favorites (3c467da)
      • API.followers -> API.get_followers (ce768d9)
      • API.followers_ids -> API.get_follower_ids (fa5e7c4)
        • models.User.followers_ids -> models.User.follower_ids (fa5e7c4)
      • API.friends -> API.get_friends (6f3fccb)
      • API.friends_ids -> API.get_friend_ids (bab3e5e)
      • API.friendships_incoming -> API.incoming_friendships (007bd07)
      • API.friendships_outgoing -> API.outgoing_friendships (1400065)
      • API.geo_search -> API.search_geo (6f4fb39)
      • API.list_direct_messages -> API.get_direct_messages (ff1186f)
      • API.list_members -> API.get_list_members (5845f02)
      • API.list_subscribers -> API.get_list_subscribers (a05b630)
      • API.lists_all -> API.get_lists (458e0e8)
      • API.lists_memberships -> API.get_list_memberships (9dddc12)
        • models.User.lists_memberships -> models.User.list_memberships (9dddc12)
      • API.lists_subscriptions -> API.get_list_subscriptions (51945a7)
        • models.User.lists_subscriptions -> models.User.list_subscriptions (51945a7)
      • API.mutes -> API.get_mutes (744edc2)
      • API.mutes_ids -> API.get_muted_ids (ea26a29)
      • API.retweeters -> API.get_retweeter_ids (588c342)
      • API.retweets -> API.get_retweets (3b3ba24)
      • API.retweets_of_me -> API.get_retweets_of_me (737bd0b)
      • API.saved_searches -> API.get_saved_searches (8b39f74)
      • API.search -> API.search_tweets (7fac253)
      • API.show_friendship -> API.get_friendship (ee9ea2e)
      • API.show_list_member -> API.get_list_member (431ab15)
      • API.show_list_subscriber -> API.get_list_subscriber (bf26301)
      • API.statuses_lookup -> API.lookup_statuses (#477)
      • API.trends_available -> API.available_trends (68b33d7)
      • API.trends_closest -> API.closest_trends (2e18162)
      • API.trends_place -> API.get_place_trends (4912a7c)
      • API.update_with_media -> API.update_status_with_media (0a5e533)
    • Rename API method parameters
      • API.geo_id: id -> place_id (78051e8)
      • API.lookup_friendships: screen_names -> screen_name (4573b35), user_ids -> user_id (3bcccf8)
      • API.lookup_statuses: id_ -> id (f13a34b)
      • API.lookup_users: screen_names -> screen_name (17a2e7c), user_ids -> user_id (e7d9e55)
      • API.search_30_day: environment_name -> label (6c66c60)
      • API.search_full_archive: environment_name -> label (295bfe4)
      • API.update_profile_image: file_ -> file (69f6c1d)
    • Require API method parameters
      • API.closest_trends: lat, long (75b9616)
      • API.create_favorite: id (d3d2abe)
      • API.create_list: name (5e7385a)
      • API.create_saved_search: query (c57a4be)
      • API.delete_direct_message: id (bcb56ab)
      • API.destroy_favorite: id (a9d41b6)
      • API.get_direct_message: id (f5775ee)
      • API.get_oembed: url (af0cc51)
      • API.get_place_trends: id (c50f540)
      • API.get_retweeter_ids: id (66f6704)
      • API.get_status: id (bac73c3)
      • API.reverse_geocode: lat, long (87d8646)
      • API.search_30_day: query (52874b7)
      • API.search_full_archive: query (801f15d)
      • API.search_tweets: q (9377e7e)
      • API.search_users: q (21802f9)
      • API.update_status: status (f64c076)
      • API.update_status_with_media: status (0726263)
    • Stop allowing positional arguments for API methods (change to be keyword-only arguments):
      • API.add_list_member (ae18ee5)
      • API.add_list_members (8eb900f)
      • API.available_trends (7a74863)
      • API.closest_trends, besides lat and long (7946490)
      • API.create_block (caa34c6)
      • API.create_favorite, besides id (0b83984)
      • API.create_friendship (82cd798)
      • API.create_list, besides name (25cb01e)
      • API.create_mute (4aae710)
      • API.create_saved_search, besides query (76be2d9)
      • API.delete_direct_message, besides id (53ca00f)
      • API.destroy_block (c49cfb2)
      • API.destroy_favorite, besides id (8afee87)
      • API.destroy_friendship (b2d44fe)
      • API.destroy_list (4b2cfc4)
      • API.destroy_mute (009b54e)
      • API.destroy_saved_search, besides id (b7afca2)
      • API.destroy_status, besides id (876c8ca)
      • API.geo_id, besides place_id (a0cff22)
      • API.get_blocked_ids (ff38b70)
      • API.get_blocks (dc81854)
      • API.get_direct_message, besides id (4ae0ec8)
      • API.get_direct_messages (8e0507d)
      • API.get_favorites (e80b49a)
      • API.get_follower_ids (7d42597)
      • API.get_followers (c6ab5a0)
      • API.get_friend_ids (c65641b)
      • API.get_friends (e6965fa)
      • API.get_friendship (6dea7de)
      • API.get_list (92dc37f)
      • API.get_list_member (0af06db)
      • API.get_list_members (7c8be8d)
      • API.get_list_memberships (ec7601f)
      • API.get_list_subscriber (a175cdd)
      • API.get_list_subscribers (3ee84ef)
      • API.get_list_subscriptions (178d719)
      • API.get_lists (3cd0058)
      • API.get_muted_ids (2967104)
      • API.get_mutes (9e9d370)
      • API.get_oembed, besides url (d13d853)
      • API.get_place_trends, besides id (548810c)
      • API.get_retweeter_ids, besides id (9907c25)
      • API.get_retweets, besides id (0bd0292)
      • API.get_retweets_of_me (2b2ed0a)
      • API.get_saved_search, besides id (1d3d3ae)
      • API.get_saved_searches (c5f5b4b)
      • API.get_settings (2c2f0ec)
      • API.get_status, besides id (30af3ac)
      • API.get_user (6b761ce)
      • API.home_timeline (b91be22)
      • API.incoming_friendships (6d3b7f2)
      • API.list_timeline (e3ec5c1)
      • API.lookup_friendships (0eff951)
      • API.lookup_statuses, besides id (cf9845d)
      • API.lookup_users (7317109)
      • API.media_upload, besides filename (ec2498f)
      • API.mentions_timeline (3614ce4)
      • API.outgoing_friendships (09f8504)
      • API.rate_limit_status (b4b91c1)
      • API.remove_list_member (e7fa800)
      • API.remove_list_members (593ef1c)
      • API.report_spam (f55efcf)
      • API.retweet, besides id (4f7be88)
      • API.reverse_geocode: besides lat and long (b209c48)
      • API.search_30_day, besides label and query (434fd35)
      • API.search_full_archive, besides label and query (44391bc)
      • API.search_geo (0a6bec9)
      • API.search_tweets, besides q (445da4e)
      • API.search_users, besides q (76ca416)
      • API.send_direct_message, besides recipient_id and text (7d1a549)
      • API.set_settings (bf1d928)
      • API.supported_languages (2034efc)
      • API.subscribe_list (ee3b718)
      • API.unretweet, besides id (4626c42)
      • API.unsubscribe_list (2df2311)
      • API.update_list (8b3b4fb)
      • API.update_profile (99cd815)
      • API.update_profile_banner, besides filename (1ca22be)
      • API.update_profile_image, besides filename (3539fa2)
      • API.update_status, besides status (761cbfe)
      • API.update_status_with_media, besides filename and status (0ac4e83)
      • API.user_timeline (0ef964f)
    • Reorder API.update_status_with_media parameters (87abdcd)
    • Rename API initialization parameter: auth_handler -> auth (ee313bd)
    • Stop allowing positional arguments besides auth for API initialization (da2f276)
    • Remove API.api_root and API.upload_root (e757919)
    • Remove API.compression (4590c7a)
    • Remove API.me, AuthHandler.get_username, and OAuthHandler.get_username (807f937)
    • Remove API.search_host and API.search_root (92db0cf)
    • Remove API.wait_on_rate_limit_notify (f325738)
      • Always log warning when rate limit reached
    • Remove map_ keyword argument aliasing for API.lookup_statuses (0a404c3)

    Stream

    • Remove and replace StreamListener by merging it into Stream (39abff4)
      • StreamListener.keep_alive -> Stream.on_keep_alive (abf4d5d)
      • StreamListener.on_connect -> Stream.on_connect
      • StreamListener.on_data -> Stream.on_data
      • StreamListener.on_delete -> Stream.on_delete
      • StreamListener.on_disconnect -> Stream.on_disconnect_message (6c3b997)
      • StreamListener.on_error -> Stream.on_request_error (fe3bb8b)
      • StreamListener.on_exception -> Stream.on_exception
      • StreamListener.on_limit -> Stream.on_limit
      • StreamListener.on_scrub_geo -> Stream.on_scrub_geo
      • StreamListener.on_status -> Stream.on_status
      • StreamListener.on_status_withheld -> Stream.on_status_withheld
      • StreamListener.on_timeout -> Stream.on_connection_error (8f62297)
      • StreamListener.on_user_withheld -> Stream.on_user_withheld
      • StreamListener.on_warning -> Stream.on_warning
    • Remove Stream.api (21a9db2)
    • Remove Stream.body (3e40193)
    • Remove Stream.headers (d07af4e)
    • Remove Stream.host (9cf8518)
    • Remove Stream.new_session (26518ab)
    • Remove Stream.timeout (a2f79f1)
    • Remove Stream.url (48cbf97)
    • Remove Stream parameters and attributes for reconnect wait times (24059d4)
      • Remove Stream.retry_time_start, Stream.retry_420_start, Stream.retry_time_cap, Stream.snooze_time_step, Stream.snooze_time_cap, Stream.retry_time, and Stream.snooze_time
    • Rename Stream.retry_count to Stream.max_retries (3585f13)
    • Replace Stream.auth with parameters and attributes for each credential (c9f59e6)
      • Replace Stream.auth with Stream.consumer_key, Stream.consumer_secret, Stream.access_token, and Stream.access_token_secret
    • Replace Stream parameter, proxies, with proxy (#1272)
    • Remove Stream.filter parameter: encoding (b3f2db2)
    • Rename Stream.filter and Stream.sample parameters: is_async -> threaded (6c96c15)
    • Stop allowing positional arguments for Stream.filter (0629d5f)
    • Stop allowing positional arguments for Stream.sample (b170720)

    Twitter API Backwards-Incompatible Changes

    • Remove API.configuration (#1614)
    • Remove API.geo_similar_places (c6cfd97)
    • Remove API.related_results (068273b)
    • Remove id endpoint parameter for API.create_block (e4eaa4b)
    • Remove id endpoint parameter for API.create_friendship (6a3c1ab)
    • Remove id endpoint parameter for API.create_mute (bb25d69)
    • Remove id endpoint parameter for API.destroy_block (1a9b52d)
    • Remove id endpoint parameter for API.destroy_friendship (66f1612)
    • Remove id endpoint parameter for API.destroy_mute (8c444c5)
    • Remove id endpoint parameter for API.get_follower_ids (5cddd12)
    • Remove id endpoint parameter for API.get_followers (a3fb959)
    • Remove id endpoint parameter for API.get_friend_ids(7cbf818)
    • Remove id endpoint parameter for API.get_friends (6875e15)
    • Remove id endpoint parameter for API.get_user (a2681ed)
    • Remove accuracy and contained_within endpoint parameters for API.search_geo (d37a409)
    • Remove allow_contributor_request endpoint parameter for API.set_settings (1cc33b2)
    • Update API.update_profile_banner endpoint parameters: offset_right -> offset_top (83f9b79)
    • Remove enable_dmcommands and fail_dmcommands parameters for API.update_status (fe5b3ef)
    • Remove in_reply_to_status_id_str and auto_populate_reply_metadata endpoint parameters for API.update_status_with_media (c3c9d29)
    • Remove id endpoint parameter for API.user_timeline (#1484)
    • Remove Stream.firehose (ad50cdc)
    • Remove Stream.retweet(6b1944b)
    • Remove Stream.sitestream and Stream.userstream (96f7e63)
      • Remove StreamListener.on_direct_message and StreamListener.on_friends (ab2479b)
      • Remove StreamListener.on_event (20b5afb)

    Other

    • Datetime objects for models.List.created_at, models.SavedSearch.created_at, models.Status.created_at, and models.User.created_at are now aware (59d4d92)
    • Change return_cursors parameter for JSONParser.parse and ModelParser.parse to be keyword-only argument (56b8e31)
    • Remove method parameter from parse method for Parser and its subclasses (dda2ec6)
    • Remove handling of 401 HTTP status code in API.verify_credentials (7e4d2a4)
    • Remove models.List.is_member and models.List.is_subscribed (b765aee)

    New Features / Improvements

    New Methods And Parameters / Attributes

    • Add API.get_list_ownerships (#1282, #1498)
      • Add models.User.list_ownerships (#1282)
    • Add API.get_profile_banner (58ac8bb)
    • Add API.no_retweets_friendships (496a399)
    • Add API.remove_profile_banner (f0e53c6)
    • Add API.update_friendship (ddd24a4)
    • Add API.user_agent (bbec64b)
    • Add endpoint parameters for API methods:
      • API.create_block: include_entities, skip_status (5e694b2)
      • API.create_favorite: include_entities (65c7ce7)
      • API.destroy_block: include_entities, skip_status (7299362)
      • API.destroy_favorite: include_entities (ecd19f0)
      • API.destroy_status: trim_user (ed363e6)
      • API.get_blocked_ids: stringify_ids (316b4cc)
      • API.get_blocks: include_entities, skip_status (7ef1e85)
      • API.get_favorites: include_entities (2b91edc)
      • API.get_follower_ids: stringify_ids (c490027)
      • API.get_friend_ids: stringify_ids, count (aba327e)
      • API.get_list_member: include_entities, skip_status (e959787)
      • API.get_list_members: count, include_entities, skip_status (232fa29)
      • API.get_list_subscriber: include_entities, skip_status (783941a)
      • API.get_muted_ids: stringify_ids (8b04108)
      • API.get_retweeter_ids: count (71ca488)
      • API.get_retweets: trim_user (e377188)
      • API.get_retweets_of_me: trim_user, include_entities, include_user_entities (589d97d)
      • API.get_user: include_entities (485691d)
      • API.incoming_friendships: stringify_ids (ffb7c0e)
      • API.media_upload: media_category, additional_owners (#1486)
      • API.mentions_timeline: trim_user, include_entities (eb7c8f6)
      • API.outgoing_friendships: stringify_ids (7ed0762)
      • API.retweet: trim_user (70d9665)
      • API.search_users: include_entities (8d64b61)
      • API.unretweet: trim_user (6d93f3b)
      • API.update_profile: include_entities, skip_status (9715c4a)
    • Add Stream.on_disconnect method (#277)
    • Expose Stream.thread (9c2419d)

    New Functionality

    • Allow sending Quick Reply Options with Direct Messages (#1280)
      • Replace API.send_direct_message parameter, quick_reply_type, with quick_reply_options
    • Allow sending Call-To-Action buttons with Direct Messages in API.send_direct_message (#1311)

    Documentation For Existing Methods

    • Document API.get_settings (cbac800)
    • Document API.incoming_friendships (09dbe0e)
    • Document API.outgoing_friendships (8ff5f22)
    • Document API.search_geo (a51a097)
    • Document API.set_settings (4703da3)
    • Document API.supported_languages (9bb8446)
    • Document API.update_profile_banner (a5df615)

    Dependencies

    • Update requests_oauthlib dependency requirement to >= 1.0.0 (bf629e5)
    • Remove requests socks extra from setup.py install_requires (38b6de6)
      • Add socks extra requiring requests socks extra

    Other

    • Check consumer key and secret type when initializing OAuthHandler (#1489)
    • Make models.User hashable (#1306)
    • Reduce extra sleep time for rate limit handling for API (#1049)
    • Handle keyword arguments for API.update_profile_image (ab96f2f)
    • Handle keyword arguments for API.update_profile_banner (88c3fa1)
    • Treat all 2xx HTTP status codes as successful responses (a0f6984)
    • Support gevent for streaming (#651)
    • Return thread when using threaded Stream.filter and Stream.sample (2e957b6)
    • Use specific user agent for Stream (5994c4b)

    Misc

    • Update and improve various documentation and tests
    • Various other optimizations and improvements

    Bug Fixes

    • Handle connection errors when streaming (#237, #448, #750, #1024, #1113, #1416)
    • Remove dependence on string length delimitation in Stream (#892)
    • Stop reraising exceptions in Stream._connect (#1072)
    • Change Stream.sample method to use GET HTTP method (1b0e869)
    • Default to models.User model in models.Status.parse more broadly for user attribute to handle parsers without model_factory attribute or model factories without user attribute (#538)
    • Default to models.Status model in models.SearchResults.parse more broadly for results to handle parsers without model_factory attribute or model factories without status attribute (71c031b)
    • Start on page 1 for PageIterator (#958)
    • Handle Twitter API issue with duplicate pages for API.search_users (#958, #1465)
    • Allow integer IDs for Stream.filter (#829, #830)
    • Handle ChunkedEncodingError during streaming (e8fcc4d)
    • Handle Twitter API errors with successful HTTP status codes (#1427)
    • Handle initial negative or zero limits in Cursor iterators (c1457b7)
    Source code(tar.gz)
    Source code(zip)
  • v3.10.0(Dec 26, 2020)

    This will be the last major and minor version to support Python 2.7 (#1253) and Python 3.5.
    The next non-patch release should be version 4.0.0.

    New Features / Improvements

    • Add API.search_30_day and API.search_full_archive (#1175, #1294)
    • Update allowed parameters for API.home_timeline (#1410, #1458)
      • Add trim_user, exclude_replies, include_entities
      • Remove page as erroneously documented parameter
      • Reorder count to be the first parameter
    • Update allowed parameters for API.get_oembed
      • Add hide_thread, theme, link_color, widget_type, dnt
      • Remove id
    • Remove API.update_profile_background_image (#1466)
    • Add support for Python 3.9
    • Switch from Travis CI to GitHub Actions to run tests and deploy releases (#1402)
    • Update and improve various documentation

    Bug Fixes

    • Use mimetypes.guess_type as fallback for determining image file type (#1411)
    • Use proper MIME type in Content-Type header for uploaded images
    • Allow file parameter to be used again for API.media_upload (#1412, #1413)
    • Allow file parameter to be used again for API.update_profile_banner, API.update_profile_image, and API.update_with_media (#1475)
    • Fix User.lists, User.lists_memberships, and User.lists_subscriptions to retrieve information about the user in question rather than the authenticating user (#1443, #1444)
    Source code(tar.gz)
    Source code(zip)
  • v3.9.0(Jul 11, 2020)

    New Features / Improvements

    • Add API.create_media_metadata (#716)
    • Update allowed parameters for API.update_status (#1101)
      • Add exclude_reply_user_ids, attachment_url, possibly_sensitive, trim_user, enable_dmcommands, fail_dmcommands, card_uri
      • Remove in_reply_to_status_id_str, source
    • Add allowed parameters to API.get_status
      • trim_user, include_my_retweet, include_entities, include_ext_alt_text, include_card_uri
    • Add allowed parameters to API.statuses_lookup
      • include_ext_alt_text, include_card_uri
    • Improve API.lookup_users (#706)
    • Improve and optimize API.statuses_lookup, API.create_media_metadata, API.update_status
    • Add reverse as allowed parameter for API.lists_all
    • Add count as allowed parameter for API.lists_memberships
    • Add count as allowed parameter for API.lists_subscriptions
    • Add include_entities as allowed parameter for API.list_timeline
    • Add allowed parameters to API.list_subscribers
      • count, include_entities, skip_status
    • Add support for Python 3.8
    • Update and improve setup.py
    • Use requests socks extra instead of requiring PySocks directly
    • Allow uploading of images with file names without extensions (#1060, #1086)
    • Support uploading WebP images (#1298)
    • Add missing attributes to Relationship model (#1375)
    • Update max allowed size for uploaded GIFs (#1336, #1338)
    • Add _json attribute to DirectMessage model (#1342)
    • Update and improve tests (#1217)
    • Add documentation for extended Tweets
    • Document API.lookup_users (#539)
    • Add documentation for running tests (#681)
    • Add Korean translation of documentation (#1296)
    • Add Polish translation of documentation (#1316)
    • Document API.lookup_friendships (#1375)
    • Update and improve various documentation

    Bug Fixes

    • Fix handling of invalid credentials for API.verify_credentials
    • Handle boolean value for API.verify_credentials include_email parameter (#890)
    • Allow Cursor to be used with API.list_direct_messages by adding DMCursorIterator (#1261, #1262)
    Source code(tar.gz)
    Source code(zip)
  • v3.8.0(Jul 15, 2019)

    New Features / Improvements

    • Allow streams to use daemon threads (#1126)
    • Remove API.set_delivery_device (#1203)
    • Remove simplejson import and usage (#832)
    • Allow cursor parameter for API.blocks_ids and API.mutes_ids (#1208)
    • Drop support for Python 3.4
    • Allow perform_block parameter for API.report_spam (#1090)
    • Add API.mutes (#1197, #1215)
    • Allow count parameter for API.friends (#577)
    • Remove since, from, to, and source as allowed parameters for API.search
    • Handle location deletion and withheld content notices for streams (#886)
    • Allow usage of equality and difference operators with User objects (#939)
    • Add _json attribute to Category, Friendship, and List models (#590, #1169)
    • Remove API.suggested_categories, API.suggested_users, and API.suggested_users_tweets
    • Update and improve tests and cassettes (#1242)
    • Update DirectMessage model (#1081, #1228)
    • Replace API.direct_messages and API.sent_direct_messages with API.list_direct_messages (#1081, #1228)
    • Update API.get_direct_message, API.send_direct_message, and API.destroy_direct_message (#1081, #1228)
    • Update and improve various documentation

    Bug Fixes

    • Exclude examples during installation (#1141, #1164)
    • Properly initialize OAuthHandler.request_token (#1149)
    • Properly handle map_ parameter for API.statuses_lookup (#598)
    • Support cursor pagination for API.blocks_ids and API.mutes_ids (#930, #931)
    • Return values for API.update_profile_background_image and API.update_profile_banner (#904)
    • Replace usage of root logger
    • Close Requests sessions (#810, #1093, #1237)
    Source code(tar.gz)
    Source code(zip)
  • v3.7.0(Jun 1, 2019)

    Note: 3.7.0 was released on 2018-11-27. The release was re-published when the associated tag was renamed from 3.7.0 to v3.7.0 to be consistent with recent releases.

    New Features / Improvements

    • Allow trim_user and exclude_replies as parameters for API.user_timeline (#909)
    • Allow tweet_mode parameter for API.statuses_lookup (#840, #926)
    • Drop support for Python 2.6 and 3.3
    • Discord Server
    • Add proxy support for streams (#1033)
    • Add API.create_mute, API.destroy_mute, and API.mutes_ids (#1055)
    • Allow tweet_mode parameter for API.lookup_users (#1130)

    Bug Fixes

    • Fix AttributeError during streaming (#1026, #1027)
    • Update how requirements are specified (#1029, #1030)
    • Fix compatibility issue with Python 3.7 (#1017, #1042)
    Source code(tar.gz)
    Source code(zip)
  • v3.6.0(Mar 2, 2018)

    New Features / Improvements

    • Parse Status.quoted_status as a Status object (#633)
    • Allow in_reply_to_status_id_str as a parameter for API.update_status and API.update_with_media (#693)
    • Add stall_warnings parameter to Stream.sample (#701)
    • Add API.unretweet (#735, #736)
    • Allow auto_populate_reply_metadata as a parameter for API.update_status and API.update_with_media (#761)
    • Allow profile_link_color as a parameter for API.update_profile
    • Add support for Python 3.6 (#831, #884)

    Bug Fixes

    • Update file size limit for API.media_upload (#717)
    • Fix JSONParser.parse returning None in certain cases (#765, #766)
    • Include URL parameters when accessing cache (#777)
    • Properly re-raise exceptions during streaming
    • Fix AttributeError and TypeError during streaming (#698)
    • Properly encode filter_level for Stream.filter (#782)
    Source code(tar.gz)
    Source code(zip)
  • v3.5.0(Nov 20, 2015)

    Features / Improvements

    • Allow 'full_text' param when getting direct messages ( #664 )
    • Explicitly return api code when parsing error ( #666 )
    • Remove deprecated function and clean up codes ( #583 )

    Bug Fixes

    • update_status: first positional argument should be 'status' ( #578 )
    • Fix "TypeError: Can't convert 'bytes' object to str implicitly" ( #615 #658 #635 )
    • Fix duplicate raise in auth.py ( #667 )
    Source code(tar.gz)
    Source code(zip)
  • v3.4.0(Aug 14, 2015)

    New Features

    • Add API for account/settings (PR #596)
    • Added RateLimitError for easily working with the rate limit. (Issue #600, PR #611) @obskyr
    • Allow include_email param for verify_credentials API (PR #623)
    • Added support for the "filter_level" parameter for the streaming API (PR #619)

    Bug Fixes

    • Streaming: don't decode stream bytes until json.decode (PR #606)
    • Typo fix on _add_list_members, _remove_list_members properties. (PR #593)
    • Fixes issue #570 - add "exception" when raising one
    • Change raise in streaming.py to raise exception (PR #621)
    Source code(tar.gz)
    Source code(zip)
  • v3.2.0(Jan 28, 2015)

    • Remove deprecated trends methods.
    • Fix tweepy.debug() to work in Python 3.
    • Fixed issue #529 - StreamListener language filter stopped working.
    • Add Documentation Page for streaming.
    • Add media/upload endpoint.
    • Add media_ids parameter to update_status().
    Source code(tar.gz)
    Source code(zip)
  • v3.1.0(Dec 1, 2014)

    • Allow specifying your own ssl certificates for streaming client.
    • Distribute Python Wheels instead of dumb binaries.
    • Fix cursor invocation, passing args to underlying method. (https://github.com/tweepy/tweepy/issues/515)
    • Upgrade to Request 2.4.3
    Source code(tar.gz)
    Source code(zip)
  • v3.0.0(Dec 1, 2014)

    • Added multiple list members operation api methods (add_list_members, remove_list_members).
    • Added sitestream endpoint.
    • Switch to using Requests instead of httplib.
    • Fully removed support for non-secure HTTP.
    • Proxy support.
    • Add API method for /statuses/lookup.json
    • Add missing 'count' parameter to followers_ids
    • Added allowed_param to update_profile_image
    • Comparison between Status objects
    • Extend on_data method by including a conditional to process warning messages and add the definition of the method to manage those warning messages
    • Better Python 3 support.
    Source code(tar.gz)
    Source code(zip)
Quickly and efficiently delete your entire tweet history with the help of your Twitter archive without worrying about the pointless 3200 tweet limit imposed by Twitter.

Twitter Nuke Quickly and efficiently delete your entire tweet history with the help of your Twitter archive without worrying about the puny and pointl

Mayur Bhoi 73 Dec 12, 2022
Twitter bot that finds new friends in Twitter.

PythonTwitterBot Twitter Bot Thats Find New Friends pip install textblob pip install tweepy pip install googletrans check requirements.txt file Env

IbukiYoshida 4 Aug 11, 2021
A twitter multi-tool for OSINT on twitter accounts.

>TwitterCheckr A twitter multi-tool for OSINT on twitter accounts. Infomation TwitterCheckr also known as TCheckr is multi-tool for OSINT on twitter a

IRIS 16 Dec 23, 2022
twitter bot tha uses tweepy library class to connect to TWITTER API

TWITTER-BOT-tweepy- twitter bot that uses tweepy library class to connect to TWITTER API replies to mentions automatically and follows the tweet.autho

Muziwandile Nkomo 2 Jan 8, 2022
Twitter-redesign - Twitter Redesign With Django

Twitter Redesign A project that tests Django and React knowledge through a twitt

Mark Jumba 1 Jun 1, 2022
A Python wrapper around the Twitter API.

Python Twitter A Python wrapper around the Twitter API. By the Python-Twitter Developers Introduction This library provides a pure Python interface fo

Mike Taylor 3.4k Jan 1, 2023
A super awesome Twitter API client for Python.

birdy birdy is a super awesome Twitter API client for Python in just a little under 400 LOC. TL;DR Features Future proof dynamic API with full REST an

Inueni 259 Dec 28, 2022
Twitter for Python!

Tweepy: Twitter for Python! Installation The easiest way to install the latest version from PyPI is by using pip: pip install tweepy You can also use

null 9.4k Jan 7, 2023
A Python wrapper around the Twitter API.

Python Twitter A Python wrapper around the Twitter API. By the Python-Twitter Developers Introduction This library provides a pure Python interface fo

Mike Taylor 3.4k Jan 1, 2023
Python Twitter API

Python Twitter Tools The Minimalist Twitter API for Python is a Python API for Twitter, everyone's favorite Web 2.0 Facebook-style status updater for

Mike Verdone 2.9k Jan 3, 2023
Python Twitter API

Python Twitter Tools The Minimalist Twitter API for Python is a Python API for Twitter, everyone's favorite Web 2.0 Facebook-style status updater for

null 2.9k Dec 29, 2022
A Python API wrapper for the Twitter API!

PyTweet PyTweet is an api wrapper made for twitter using twitter's api version 2! Installation Windows py3 -m pip install PyTweet Linux python -m pip

TheFarGG 1 Nov 19, 2022
A python script to download twitter space, only works on running spaces (for now).

A python script to download twitter space, only works on running spaces (for now).

null 279 Jan 2, 2023
Python script using Twitter API to change user banner to see 100DaysOfCode process.

100DaysOfCode - Automatic Banners ??‍?? Adds a number to your twitter banner indicating the number of days you have in the #100DaysOfCode challenge Se

Ingrid Echeverri 10 Jul 6, 2022
Python script to harvest tweets with the Twitter API V2 Academic Research Product Track

Tweet harvester Python script to scrape, collect, and/or harvest tweets with the Twitter API V2 Academic Research Product Track. Important note: In or

Thomas Frissen 2 Nov 11, 2021
Python API Client for Twitter API v2

?? Python Client For Twitter API v2 ?? Why Twitter Stream ? Twitter-Stream.py a python API client for Twitter API v2 now supports FilteredStream, Samp

Twitivity 31 Nov 19, 2022
This is a Python package to create a snowflake identifier similar to Discord's or Twitter's.

snowflake2 Based on falcondai and fenhl's Python snowflake tool, but with documentation and simliarities to Discord. Installation instructions Install

Learnloot 2 Mar 19, 2022
Some python code to make twitter bots ;)

How to set up a twitter bot using python's tweepy library Create a twitter developer account and project Make sure you are logged into your twitter ac

Wael 2 Jan 10, 2022
A Twitter bot written in Python using Tweepy and hosted on a server.

A Twitter bot written in Python using Tweepy. It can like and/or retweet tweets that contain single or multiple keywords and hashtags.

anniedotexe 11 Dec 15, 2022