[PR]
Changelog
These changelogs are also at https://github.com/tweepy/tweepy/releases as release notes.
Version 4.12.1 (2022-11-06)
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
AsyncBaseStreamto abort closed SSL transports (#1904)Warn when Tweet data is missing default
edit_history_tweet_idsfield (3dea0df, #1994)Change initial
network_error_waitto 0 for streaming (b18c1a6)Attempt to reconnect immediately when established streaming connection drops
Misc
Document
limitandpagination_tokenparameters forPaginatorandAsyncPaginator(e98ab02, bb934fc)Use separate method to construct
ResponseinClientandAsyncClient(#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
namedtuplein documentation forResponse(352c74a)Improve format of badges in README (d41c813)
Version 4.12.0 (2022-10-27)
New Features / Improvements
Add support for Direct Messages with Twitter API v2 (#1995)
Add
DirectMessageEventmodelAdd
Client.get_direct_message_events,Client.create_direct_message, andClient.create_direct_message_conversationAdd
AsyncClient.get_direct_message_events,AsyncClient.create_direct_message, andAsyncClient.create_direct_message_conversation
Add support for Python 3.11 (a391c66)
Bug Fixes
Misc
Add documentation for
edit_history_tweet_idsandedit_controlsTweetfields (2b1e159)This documentation was previously missing from Twitter's API documentation
Fix class references in notes in documentation for
AsyncClientmethods (f737b87)Fix signature of
Client.get_quote_tweetsin documentation (6f7de39)Update actions/setup-python from v2 to v4 (f16b3dc, 0148be7)
Version 4.11.0 (2022-10-24)
New Features / Improvements
Bug Fixes
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_parametersargument inAPI.indicate_direct_message_typing(396ab84)Update
models.Listmethods to pass keyword arguments toAPImethods (#1987)Update
models.Listmethods 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_tweetsin documentation (86577b1)Add
media_fields,place_fields, andpoll_fieldsparameters
Add version changed directive to documentation for
get_list_tweets(5cb2616)Improve documentation for
wait_on_rate_limitparameter for streaming (#1986)Add sections for old and previously missing versions to changelog (6aa1b77)
Update cassettes for testing methods that return Tweet objects (872b33e)
Version 4.10.1 (2022-08-22)
Bug Fixes
Fix
AsyncBaseClientrate limit handling (#1902)Fix handling of
StreamRulewhen passed in list toStreamingClient.delete_rulesorAsyncStreamingClient.delete_rules(#1942)Add support for
media_fields,place_fields, andpoll_fieldsparameters forClient.get_list_tweetsandAsyncClient.get_list_tweets(#1931)Ignore
AsyncClientmethod parameters explicitly passed asNone(#1944)
Misc
Version 4.10.0 (2022-05-20)
New Features / Improvements
Add asynchronous interfaces for Twitter API v2
Add support for reverse chronological home timeline with Twitter API v2 (#1900)
Add
Client.get_home_timelineandAsyncClient.get_home_timeline
Update the User-Agent header based on
AsyncStream.user_agenteven ifAsyncStream.sessionis already initialized/set (096a62c)
Twitter API Deprecations
Misc
Update and improve various documentation and tests
Version 4.9.0 (2022-05-05)
New Features / Improvements
Twitter API Deprecations
Deprecate
Stream.sampleand note deprecation of compliance messages forStream.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_requirefrom setup.py (2870031)Stop creating universal wheels (9d93ec8)
Update and improve various documentation and tests
Version 4.8.0 (2022-03-24)
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
Clientmethods that require the authenticating user's ID (0157d0b)Raise
TypeErrorfor those methods when the access token isn't set
Raise
NotFoundrather thanHTTPExceptionwhen encountering 404 response status codes inBaseClient.request(b6b8219)
Version 4.7.0 (2022-03-17)
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
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)
Use dash instead of underscore for requests-oauthlib requirement (2c94758)
Optimize
Tweet.referenced_tweetsinitialization (3299881)Update and improve various documentation
Version 4.6.0 (2022-02-24)
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
ClientandStreamto inherit from newBaseClientandBaseStreamclasses and addStreamingClient,StreamResponse, andStreamRule
Add support for new
max_resultsandpagination_tokenparameters forClient.get_liking_users(bdd6b55)Add support for new
max_resultsandpagination_tokenparameters forClient.get_retweeters(3479e56)Add support for new
sort_orderparameter forClient.search_all_tweets(bd202e5)Add support for new
sort_orderparameter forClient.search_recent_tweets(8b47170)Add
Client.get_space_tweets(c8d5d9a)Add
Space.subscriber_count(1ffc8cd)Use
reprof text inTweet.__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__inDataMapping(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.sessionwithinStream.__init__(80adf5b)Update the user agent based on
Stream.user_agenteven ifStream.sessionis already initialized
Use oauthlib to create code challenge and verifier for PKCE (eb22416)
Bug Fixes
Fix datetime endpoint parameter formatting in
Client._make_request(#1793)
Misc
Version 4.5.0 (2022-01-24)
New Features / Improvements
Revamp authentication interface
Add support for OAuth 2.0 Authorization Code Flow with PKCE
Rename
OAuthHandlertoOAuth1UserHandler(fb6eb7d)OAuthHandleris kept as a deprecated alias (cba7317)
Rename
AppAuthHandlertoOauth2AppHandler(529d793)AppAuthHandleris kept as a deprecated alias (d4ceb1a)
Rename
OAuth2BearertoOAuth2BearerHandler(0781fde)Allow passing access token and secret directly to
OAuth1UserHandler.__init__(99f3583)Note, this changes the
callbackparameter to be the fifth argument, positionally
Allow
OAuth2BearerHandlerto be used asauthparameter forAPI(5a2a3fc)Remove
AuthHandler(d600c4c)Remove
OAuth1UserHandler.get_xauth_access_token(8e2de9f)Update and improve authentication documentation (f9a722b)
Other improvements and optimizations
Add support for
Media.url(#1722)Use requests exception to handle
JSONDecodeError(b492b0a)Update requests dependency requirement to >= 2.27.0 (ed66e8e)
Bug Fixes
Misc
Version 4.4.0 (2021-11-17)
New Features / Improvements
Bug Fixes
Remove erroneous
Space.__str__(ebb4bfd)
Version 4.3.0 (2021-11-03)
New Features / Improvements
Add support for managing Tweets with Twitter API v2 (7884e3a)
Misc
Version 4.2.0 (2021-10-29)
New Features / Improvements
Add support for managing lists with Twitter API v2 (b1342bf)
Rename
Client.followandClient.unfollowtoClient.follow_userandClient.unfollow_user, respectively (8f8de15)Client.followandClient.unfolloware kept as deprecated aliases
Add FAQ section in documentation
Update and improve various documentation and tests
Twitter API Changes
Change
stateto optional parameter forClient.search_spaces(e61d5d6)
Bug Fixes
Version 4.1.0 (2021-10-07)
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
SpacemodelAdd
Client.search_spaces,Client.get_spaces, andClient.get_space
Add support for batch compliance (6ca75e1)
Add
Client.get_compliance_jobs,Client.get_compliance_job, andClient.create_compliance_job
Add
Client.get_muted(00cdab8)Minor documentation corrections
Version 4.0.1 (2021-10-01)
Bug Fixes
Fix handling of strings passed as fields parameters for
Clientmethods (d61a5d9)Include unexpected parameters passed to
Clientmethods in Twitter API request (618d1c2)This future-proofs for new endpoint parameters
Stop checking parameter names when converting parameters passed to
Clientmethods from datetimes to strings (1320a37)This future-proofs for new endpoint parameters besides
start_timeandend_timethat accept datetimes
Handle simplejson being installed when handling
JSONDecodeErrorinHTTPException(586c162)
Misc
Version 4.0.0 (2021-09-25)
Major New Features / Improvements
Support Twitter API v2 (#1472, #1535)
Replace API v1.1 models in package namespace
Rework
APIReplace
bind_apiandAPIMethodwithAPI.requestStop using property decorators for
APImethodsUse
paginationdecorator
Add
requests.Sessioninstance asAPI.sessionattribute (2f28757)Initialize a single
requests.Sessioninstance perAPIinstance, 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.requestand otherAPImethods
Rework streaming
StreamListenerhas been merged intoStream(see Backwards-Incompatible Changes section)Streamdata/event handling methods (i.e. those starting withon_) now log by default and disregard return valuesAllow 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)Add table for
APIdocumentation (6db8e4c)Separate documentation for exceptions (8a831b1)
Move changelog to documentation (fc98629)
Update, improve, and organize documentation
Rework exceptions
Backwards-Incompatible Changes
API
Rename
APIandmodelsmethodsAPI.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
APImethod parametersAPI.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
APImethod parametersAPI.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
APImethods (change to be keyword-only arguments):API.add_list_member(ae18ee5)API.add_list_members(8eb900f)API.available_trends(7a74863)API.closest_trends, besideslatandlong(7946490)API.create_block(caa34c6)API.create_favorite, besidesid(0b83984)API.create_friendship(82cd798)API.create_list, besidesname(25cb01e)API.create_mute(4aae710)API.create_saved_search, besidesquery(76be2d9)API.delete_direct_message, besidesid(53ca00f)API.destroy_block(c49cfb2)API.destroy_favorite, besidesid(8afee87)API.destroy_friendship(b2d44fe)API.destroy_list(4b2cfc4)API.destroy_mute(009b54e)API.destroy_saved_search, besidesid(b7afca2)API.destroy_status, besidesid(876c8ca)API.geo_id, besidesplace_id(a0cff22)API.get_blocked_ids(ff38b70)API.get_blocks(dc81854)API.get_direct_message, besidesid(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, besidesurl(d13d853)API.get_place_trends, besidesid(548810c)API.get_retweeter_ids, besidesid(9907c25)API.get_retweets, besidesid(0bd0292)API.get_retweets_of_me(2b2ed0a)API.get_saved_search, besidesid(1d3d3ae)API.get_saved_searches(c5f5b4b)API.get_settings(2c2f0ec)API.get_status, besidesid(30af3ac)API.get_user(6b761ce)API.home_timeline(b91be22)API.incoming_friendships(6d3b7f2)API.list_timeline(e3ec5c1)API.lookup_friendships(0eff951)API.lookup_statuses, besidesid(cf9845d)API.lookup_users(7317109)API.media_upload, besidesfilename(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, besidesid(4f7be88)API.reverse_geocode: besideslatandlong(b209c48)API.search_30_day, besideslabelandquery(434fd35)API.search_full_archive, besideslabelandquery(44391bc)API.search_geo(0a6bec9)API.search_tweets, besidesq(445da4e)API.search_users, besidesq(76ca416)API.send_direct_message, besidesrecipient_idandtext(7d1a549)API.set_settings(bf1d928)API.supported_languages(2034efc)API.subscribe_list(ee3b718)API.unretweet, besidesid(4626c42)API.unsubscribe_list(2df2311)API.update_list(8b3b4fb)API.update_profile(99cd815)API.update_profile_banner, besidesfilename(1ca22be)API.update_profile_image, besidesfilename(3539fa2)API.update_status, besidesstatus(761cbfe)API.update_status_with_media, besidesfilenameandstatus(0ac4e83)API.user_timeline(0ef964f)
Reorder
API.update_status_with_mediaparameters (87abdcd)Rename
APIinitialization parameter:auth_handler->auth(ee313bd)Stop allowing positional arguments besides
authforAPIinitialization (da2f276)Remove
API.api_rootandAPI.upload_root(e757919)Remove
API.compression(4590c7a)Remove
API.me,AuthHandler.get_username, andOAuthHandler.get_username(807f937)Remove
API.search_hostandAPI.search_root(92db0cf)Remove
API.wait_on_rate_limit_notify(f325738)Always log warning when rate limit reached
Remove
map_keyword argument aliasing forAPI.lookup_statuses(0a404c3)
Stream
Remove and replace
StreamListenerby merging it intoStream(39abff4)StreamListener.keep_alive->Stream.on_keep_alive(abf4d5d)StreamListener.on_connect->Stream.on_connectStreamListener.on_data->Stream.on_dataStreamListener.on_delete->Stream.on_deleteStreamListener.on_disconnect->Stream.on_disconnect_message(6c3b997)StreamListener.on_error->Stream.on_request_error(fe3bb8b)StreamListener.on_exception->Stream.on_exceptionStreamListener.on_limit->Stream.on_limitStreamListener.on_scrub_geo->Stream.on_scrub_geoStreamListener.on_status->Stream.on_statusStreamListener.on_status_withheld->Stream.on_status_withheldStreamListener.on_timeout->Stream.on_connection_error(8f62297)StreamListener.on_user_withheld->Stream.on_user_withheldStreamListener.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, andStream.snooze_time
Rename
Stream.retry_counttoStream.max_retries(3585f13)Replace
Stream.authwith parameters and attributes for each credential (c9f59e6)Replace
Stream.authwithStream.consumer_key,Stream.consumer_secret,Stream.access_token, andStream.access_token_secret
Replace
Streamparameter,proxies, withproxy(#1272)Remove
Stream.filterparameter:encoding(b3f2db2)Rename
Stream.filterandStream.sampleparameters: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
Relationmodel (cc4479a)
Remove
idendpoint parameter forAPI.create_block(e4eaa4b)Remove
idendpoint parameter forAPI.create_friendship(6a3c1ab)Remove
idendpoint parameter forAPI.create_mute(bb25d69)Remove
idendpoint parameter forAPI.destroy_block(1a9b52d)Remove
idendpoint parameter forAPI.destroy_friendship(66f1612)Remove
idendpoint parameter forAPI.destroy_mute(8c444c5)Remove
idendpoint parameter forAPI.get_follower_ids(5cddd12)Remove
idendpoint parameter forAPI.get_followers(a3fb959)Remove
idendpoint parameter forAPI.get_friend_ids(7cbf818)Remove
idendpoint parameter forAPI.get_friends(6875e15)Remove
idendpoint parameter forAPI.get_user(a2681ed)Remove
accuracyandcontained_withinendpoint parameters forAPI.search_geo(d37a409)Remove
allow_contributor_requestendpoint parameter forAPI.set_settings(1cc33b2)Update
API.update_profile_bannerendpoint parameters:offset_right->offset_top(83f9b79)Remove
enable_dmcommandsandfail_dmcommandsparameters forAPI.update_status(fe5b3ef)Remove
in_reply_to_status_id_strandauto_populate_reply_metadataendpoint parameters forAPI.update_status_with_media(c3c9d29)Remove
idendpoint parameter forAPI.user_timeline(#1484)Remove
Stream.firehose(ad50cdc)Remove
Stream.retweet(6b1944b)Remove
Stream.sitestreamandStream.userstream(96f7e63)
Other
Datetime objects for
models.List.created_at,models.SavedSearch.created_at,models.Status.created_at, andmodels.User.created_atare now aware (59d4d92)Change
return_cursorsparameter forJSONParser.parseandModelParser.parseto be keyword-only argument (56b8e31)Remove
methodparameter fromparsemethod forParserand its subclasses (dda2ec6)Remove handling of 401 HTTP status code in
API.verify_credentials(7e4d2a4)Remove
models.List.is_memberandmodels.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
APImethods: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_disconnectmethod (#277)Expose
Stream.thread(9c2419d)
New Functionality
Documentation For Existing Methods
Dependencies
Other
Check consumer key and secret type when initializing
OAuthHandler(#1489)Make
models.Userhashable (#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.filterandStream.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.samplemethod to use GET HTTP method (1b0e869)Default to
models.Usermodel inmodels.Status.parsemore broadly foruserattribute to handle parsers withoutmodel_factoryattribute or model factories withoutuserattribute (#538)Default to
models.Statusmodel inmodels.SearchResults.parsemore broadly for results to handle parsers withoutmodel_factoryattribute or model factories withoutstatusattribute (71c031b)Start on page 1 for
PageIterator(#958)Handle Twitter API issue with duplicate pages for
API.search_users(#958, #1465)Handle
ChunkedEncodingErrorduring streaming (e8fcc4d)Handle Twitter API errors with successful HTTP status codes (#1427)
Handle initial negative or zero limits in
Cursoriterators (c1457b7)
Version 3.10.0 (2020-12-25)
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_dayandAPI.search_full_archive(#1175, #1294)Update allowed parameters for
API.home_timeline(#1410, #1458)Add
trim_user,exclude_replies,include_entitiesRemove
pageas erroneously documented parameterReorder
countto be the first parameter
Update allowed parameters for
API.get_oembedAdd
hide_thread,theme,link_color,widget_type,dntRemove
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_typeas fallback for determining image file type (#1411)Use proper MIME type in Content-Type header for uploaded images
Allow
fileparameter to be used again forAPI.media_upload(#1412, #1413)Allow
fileparameter to be used again forAPI.update_profile_banner,API.update_profile_image, andAPI.update_with_media(#1475)Fix
User.lists,User.lists_memberships, andUser.lists_subscriptionsto retrieve information about the user in question rather than the authenticating user (#1443, #1444)
Version 3.9.0 (2020-07-11)
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_uriRemove
in_reply_to_status_id_str,source
Add allowed parameters to
API.get_statustrim_user,include_my_retweet,include_entities,include_ext_alt_text,include_card_uri
Add allowed parameters to
API.statuses_lookupinclude_ext_alt_text,include_card_uri
Improve
API.lookup_users(#706)Improve and optimize
API.statuses_lookup,API.create_media_metadata,API.update_statusAdd
reverseas allowed parameter forAPI.lists_allAdd
countas allowed parameter forAPI.lists_membershipsAdd
countas allowed parameter forAPI.lists_subscriptionsAdd
include_entitiesas allowed parameter forAPI.list_timelineAdd allowed parameters to
API.list_subscriberscount,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
Relationshipmodel (#1375)Add
_jsonattribute toDirectMessagemodel (#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
Version 3.8.0 (2019-07-14)
New Features / Improvements
Allow streams to use daemon threads (#1126)
Remove
API.set_delivery_device(#1203)Remove simplejson import and usage (#832)
Allow
cursorparameter forAPI.blocks_idsandAPI.mutes_ids(#1208)Drop support for Python 3.4
Allow
perform_blockparameter forAPI.report_spam(#1090)Allow
countparameter forAPI.friends(#577)Remove
since,from,to, andsourceas allowed parameters forAPI.searchHandle location deletion and withheld content notices for streams (#886)
Allow usage of equality and difference operators with
Userobjects (#939)Add
_jsonattribute toCategory,Friendship, andListmodels (#590, #1169)Remove
API.suggested_categories,API.suggested_users, andAPI.suggested_users_tweetsUpdate and improve tests and cassettes (#1242)
Replace
API.direct_messagesandAPI.sent_direct_messageswithAPI.list_direct_messages(#1081, #1228)Update
API.get_direct_message,API.send_direct_message, andAPI.destroy_direct_message(#1081, #1228)Update and improve various documentation
Bug Fixes
Properly initialize
OAuthHandler.request_token(#1149)Properly handle
map_parameter forAPI.statuses_lookup(#598)Support cursor pagination for
API.blocks_idsandAPI.mutes_ids(#930, #931)Return values for
API.update_profile_background_imageandAPI.update_profile_banner(#904)Replace usage of root logger
Version 3.7.0 (2018-11-27)
New Features / Improvements
Allow
trim_userandexclude_repliesas parameters forAPI.user_timeline(#909)Allow
tweet_modeparameter forAPI.statuses_lookup(#840, #926)Drop support for Python 2.6 and 3.3
Add proxy support for streams (#1033)
Add
API.create_mute,API.destroy_mute, andAPI.mutes_ids(#1055)Allow
tweet_modeparameter forAPI.lookup_users(#1130)
Bug Fixes
Version 3.6.0 (2015-03-02)
New Features / Improvements
Parse
Status.quoted_statusas aStatusobject (#633)Allow
in_reply_to_status_id_stras a parameter forAPI.update_statusandAPI.update_with_media(#693)Add
stall_warningsparameter toStream.sample(#701)Allow
auto_populate_reply_metadataas a parameter forAPI.update_statusandAPI.update_with_media(#761)Allow
profile_link_coloras a parameter forAPI.update_profile
Bug Fixes
Update file size limit for
API.media_upload(#717)Fix
JSONParser.parsereturningNonein certain cases (#765, #766)Include URL parameters when accessing cache (#777)
Properly re-raise exceptions during streaming
Fix
AttributeErrorandTypeErrorduring streaming (#698)Properly encode
filter_levelforStream.filter(#782)
Version 3.5.0 (2015-11-19)
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 )
Version 3.4.0 (2015-08-13)
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)
Version 3.3.0 (2015-02-21)
Loosen our dependency requirements for Requests (>= 2.4.3)
Fix issue with streams freezing up on Python 3 (Issue #556)
Add keep_alive() callback to StreamListener when keep alive messages arrive
Fix issue with stream session headers not being used when restarting connection
Fix issue with streams getting stuck in a loop when connection dies. (PR #561)
Version 3.2.0 (2015-01-28)
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().
Version 3.1.0 (2014-12-01)
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
Version 3.0 (2014-11-30)
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.
Version 2.3.0 (2014-04-26)
Version 2.2 (2014-01-20)
Added update_profile_banner endpoint.
Don't treat HTTP status codes in 200 range as errors.
Tests no longer packaged into egg releases.
Improve test stability and enable CI testing on pull requests.
Removed Basic Auth.
Use built-in timeout feature of httplib to fix appengine.
Added retweeters() endpoint.
Removed deprecated retweeted_by and retweeted_by_ids.
Improved datetime parsing. Should be more thread safe.
Enable coverage reporting. Upload reports to Coveralls.
https://coveralls.io/r/tweepy/tweepy
Removed deprecated test() endpoint.
New stream listeners callback on_disconnect(). Called whenever "disconnect" messages arrive from Twitter before connection is killed.
https://dev.twitter.com/docs/streaming-apis/messages#Disconnect_messages_disconnect
Use HTTPS by default.
Support setting the starting cursor postion (ex: Ex: Cursor(api.friends_ids, cursor=123456))
Added API.cached_result instance flag that is "True" when cached result is returned.
New Streaming client callbacks
on_event(status): called when new events arrive
on_direct_message(status): called when a new direct message arrives.
Improvements to streaming client re-connection behavior / configuration. (https://github.com/tweepy/tweepy/commit/447f69cd3de67b0d241b9d4f669ecc9b9c0cdb54)
Version 2.1 (2013-06-16)
Added get_oembed().
friends() and followers() are back and updated to v1.1.
Fixed report_spam() endpoint.
Added "languages" parameter to streaming filter() method.
Added "timeout" support for API object. Ex: API(timeout=1000).
Python 2.5 no longer supported.
Added compression support. Ex: API(compression=True).
Added on_connect() callback to StreamListener.
Switched API search() to v1.1 endpoint. Some breaking changes.
Drop "page" based cursors and use "ID" based ones instead.
Version 2.0 (2013-02-10)
Dedicated in memory of Aaron Swartz
Twitter API 1.1 support.
Basic Authentication deprecated.
friends_timeline() removed.
mentions() removed and replaced by mentions_timeline().
retweeted_by_user() removed.
retweeted_by_me() removed.
retweeted_to_me() removed.
retweeted_by_user() removed.
friends() removed.
followers() removed.
enable_notifications() removed.
disable_notifications() removed.
exists_block() removed.
lists() removed and replaced by lists_all().
is_list_member() removed.
show_list_member added.
is_subscribed_list() removed.
show_list_subscriber() added.
trends_location() removed.
nearby_places() removed.
Version 1.13 (2013-01-17)
Version 1.12 (2012-11-08)
Version 1.11 (2012-08-14)
Version 1.10 (2012-07-08)
Version 1.9 (2012-03-17)
Version 1.8 (2011-10-31)
Version 1.7.1 (2010-05-25)
Version 1.7 (2010-05-23)
Version 1.6 (2010-03-18)
Version 1.5 (2010-01-12)
Models
Added some new helper methods to List model
User model
Added lists_memberships, lists_subscriptions, and lists helpers
Added followers_ids helper
Added ModelFactory to replace 'models' dict in tweepy.models. Extend this factory to plugin customized models then pass into API().
API
lists(), lists_memberships(), and lists_subscriptions() now take an "user" parameter for specifying which user to query.
OAuthHandler
You may now pass in an optional 'secure' boolean to the constructor which will use https for OAuth requests. Ex: auth = OAuthHandler(token,secret,secure=True)
Fallback to using 'twitter.com' instead of 'api.twitter.com' for OAuth until issue #8 is resolved.
Version 1.4 (2009-12-10)
Added people search API method. API.search_users()
Streaming API
Moved parameters into POST body to prevent "head too big" errors.
Stream can be run either asynchronously (threaded) or synchronously (blocks main thread). By default Stream will run in sync. mode. To change this pass into the stream method 'async=True'. Example: s = Stream('test', 'password', MyListener()) s.sample(async=True) # threaded mode s.filter(track=['pizza']) # synch./blocking mode
Listener now has a "on_data" method which can be overridden to manually handle the raw stream data.
tweepyshell
allow using getpass for more secure password collection new usage: tweepyshell
[password] <-- optional now enable debug mode with '-d' flag
API
retweet() method now works correctly
Added local trends method: trends_available() and trends_location()
send_direct_message() now accepts either a user/screen_name/user_id for recipient of DM
update_status() added 'source' parameter for Identi.ca
create_list() and update_list() added 'description' parameter
tweepy.debug() enables httplib debug mode
New Sphinx documentation (Thanks Kumar!) in doc/
User model
Fix timeline() to return correct timeline
Remove mentions() method
Version 1.3 (2009-11-13)
Lists API methods added
API.verify_credentials() now returns an User object if credentials are valid. Otherwise false will be returned.
API.new() removed
Removed model validation. Prone to breakage due to API changes.
Moved documentation out of api.py and into wiki.
Removed 'email' parameter from API.update_profile. No longer supported.
API.auth_handler -> API.auth
Moved memcache implementation to tweepy-more repository.
Tweepy now uses the versioned API and the new api.twitter.com subdomain
Updated retweet parsing for new payload format
Version 1.2 (2009-10-16)
API
Added automatic request re-try feature Example: API.friends(retry_count=5, retry_delay=10) Retry up to 5 times with a delay of 10 seconds between each attempt. See tutorial/t4.py for more an example.
Added cursor parameter to API.friends and API.followers methods. Note: page parameter is being deprecated by twitter on 10/26
Update parsing to handle cursor responses. When using 'cursor' parameter, the API method will return a tuple with this format: (data, next_cursor, prev_cursor) Calls not using the 'cursor' parameter are not changed in the way they return.
API.friends_ids and API.followers_ids now return a list of integers. Parser updated to handle cursor responses. See above.
Fix Status.source_url parsing
Fix search result 'source' parsing to properly unescape html and extract source
Added report_spam method
Cursor Added the Cursor object to help with pagination within the API. Please see the pagination tutorial for more details (tutorial/t6). This is the recommended way for using the 'page' and 'cursor' parameters.
Models
Status: added retweet, favorite and retweets methods (NOTE: retweet API not live yet on twitter)
Python 2.4 support
Update OAuth bundled library.
Logging removed. Having our own mini-logging system just feels like overkill. Turns out it was not really needed that much. Simply just exposing the last HTTPResponse object should be good enough for most debugging.
Version 1.1 (2009-09-24)
Fixes
Google App Engine fixes (thanks Thomas Bohmbach, Jr)
API
Added Retweet API methods
Added Retweet Streaming method
New model: Retweet
Updated statuses parser to handle retweet_details
Added new parameters for statuses/update; lat & long
friends_ids() & followers_ids() parameter changed page -> cursor
search() added "locale" parameter
expose last httplib.HTTPResponse object received as API.last_response
OAuthHandler
Added set_request_token() method
Added support for "sign in with twitter". get_authorization_url() now takes a boolean that when true uses the "sign in with twitter" flow. See http://apiwiki.twitter.com/Sign-in-with-Twitter
Logging
Added TweepyLogger interface which allows applications to collect log messages from Tweepy for debugging purposes.
Dummy, console, and file loggers available
Examples
Appengine demo (oauth)
Documentation of each method in api.py
Version 1.0.1 (2009-09-13)
Status.user --> Status.author
User:
follow()
unfollow()
API:
init() signature change; no longer accepts 'username' parameter which is now autodetected.
added new() method. shortcut for setting up new API instances example: API.new(auth='basic', username='testuser', password='testpass')
update_profile_image() and update_profile_background_image() method added.
Added search API methods: trends, trends_current, trends_daily, and trends_weekly
Streaming:
Update to new streaming API methods
New StreamListener class replacing callback function
Fixes
User.following is now set to False instead of None when user is not followed.
python 2.5 import syntax error fixed
python 2.5 timeout support for streaming API
win32 failed import of fcntl in cache.py
Changed indents from 2 to 4 spaces
Version 1.0 (2009-08-13)
https://github.com/tweepy/tweepy/commits/e62f8c18977fd755c9d24a0abebd3b8087c75b45