diff --git a/twikit/client/gql.py b/twikit/client/gql.py index 54d7d570..ba2adeb7 100644 --- a/twikit/client/gql.py +++ b/twikit/client/gql.py @@ -7,6 +7,7 @@ BOOKMARK_FOLDER_TIMELINE_FEATURES, COMMUNITY_NOTE_FEATURES, COMMUNITY_TWEETS_FEATURES, + CREATE_TWEET_FEATURES, FEATURES, JOIN_COMMUNITY_FEATURES, LIST_FEATURES, @@ -31,10 +32,10 @@ class Endpoint: def url(path): return f'https://{DOMAIN}/i/api/graphql/{path}' - SEARCH_TIMELINE = url('flaR-PUMshxFWZWPNpq4zA/SearchTimeline') + SEARCH_TIMELINE = url('1BP5aKg8NvTNvRCyyCyq8g/SearchTimeline') SIMILAR_POSTS = url('EToazR74i0rJyZYalfVEAQ/SimilarPosts') CREATE_NOTE_TWEET = url('iCUB42lIfXf9qPKctjE5rQ/CreateNoteTweet') - CREATE_TWEET = url('SiM_cAu83R0wnrpmKQQSEw/CreateTweet') + CREATE_TWEET = url('UecQIuYzi2MCOah7-eOpcQ/CreateTweet') CREATE_SCHEDULED_TWEET = url('LCVzRQGxOaGnOnYH01NQXg/CreateScheduledTweet') DELETE_TWEET = url('VaenaVgh5q5ih7kvyVjgtg/DeleteTweet') USER_BY_SCREEN_NAME = url('NimuplG1OB7Fd2btCLdBOw/UserByScreenName') @@ -51,7 +52,7 @@ def url(path): USER_MEDIA = url('2tLOJWwGuCTytDrGBg8VwQ/UserMedia') USER_LIKES = url('IohM3gxQHfvWePH5E3KuNA/Likes') USER_HIGHLIGHTS_TWEETS = url('tHFm_XZc_NNi-CfUThwbNw/UserHighlightsTweets') - HOME_TIMELINE = url('-X_hcgQzmHGl29-UXxz4sw/HomeTimeline') + HOME_TIMELINE = url('oW4ZYHSh434ZZuEs1Kp-xw/HomeTimeline') HOME_LATEST_TIMELINE = url('U0cdisy7QFIoTfu3-Okw0A/HomeLatestTimeline') FAVORITE_TWEET = url('lI07N6Otwv1PhnEgXILM7A/FavoriteTweet') UNFAVORITE_TWEET = url('ZYKSe-w7KEslx3JhSIk5LA/UnfavoriteTweet') @@ -220,7 +221,7 @@ async def create_tweet( features = NOTE_TWEET_FEATURES else: endpoint = Endpoint.CREATE_TWEET - features = FEATURES + features = CREATE_TWEET_FEATURES return await self.gql_post(endpoint, variables, features) async def create_scheduled_tweet(self, scheduled_at, text, media_ids) -> str: diff --git a/twikit/constants.py b/twikit/constants.py index 3d7dbb28..6c59ae21 100644 --- a/twikit/constants.py +++ b/twikit/constants.py @@ -4,8 +4,15 @@ DOMAIN = 'x.com' FEATURES = { + 'rweb_tipjar_consumption_enabled': True, + 'responsive_web_graphql_exclude_directive_enabled': True, + 'verified_phone_label_enabled': False, 'creator_subscriptions_tweet_preview_api_enabled': True, + 'responsive_web_graphql_timeline_navigation_enabled': True, + 'responsive_web_graphql_skip_user_profile_image_extensions_enabled': False, + 'communities_web_enable_tweet_community_results_fetch': True, 'c9s_tweet_anatomy_moderator_badge_enabled': True, + 'articles_preview_enabled': True, 'tweetypie_unmention_optimization_enabled': True, 'responsive_web_edit_tweet_api_enabled': True, 'graphql_is_translatable_rweb_tweet_is_translatable_enabled': True, @@ -13,20 +20,25 @@ 'longform_notetweets_consumption_enabled': True, 'responsive_web_twitter_article_tweet_consumption_enabled': True, 'tweet_awards_web_tipping_enabled': False, - 'longform_notetweets_rich_text_read_enabled': True, - 'longform_notetweets_inline_media_enabled': True, - 'rweb_video_timestamps_enabled': True, - 'responsive_web_graphql_exclude_directive_enabled': True, - 'verified_phone_label_enabled': False, + 'creator_subscriptions_quote_tweet_preview_enabled': False, 'freedom_of_speech_not_reach_fetch_enabled': True, 'standardized_nudges_misinfo': True, 'tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled': True, - 'responsive_web_media_download_video_enabled': False, - 'responsive_web_graphql_skip_user_profile_image_extensions_enabled': False, - 'responsive_web_graphql_timeline_navigation_enabled': True, - 'responsive_web_enhance_cards_enabled': False + 'tweet_with_visibility_results_prefer_gql_media_interstitial_enabled': True, + 'rweb_video_timestamps_enabled': True, + 'longform_notetweets_rich_text_read_enabled': True, + 'longform_notetweets_inline_media_enabled': True, + 'responsive_web_enhance_cards_enabled': False, + 'premium_content_api_read_enabled': False, + 'responsive_web_grok_analyze_button_fetch_trends_enabled': False, + 'responsive_web_grok_analyze_post_followups_enabled': True, + 'responsive_web_jetfuel_frame': False, + 'responsive_web_grok_share_attachment_enabled': True, + 'profile_label_improvements_pcf_label_in_post_enabled': True, + 'responsive_web_grok_image_annotation_enabled': False, } + USER_FEATURES = { 'hidden_profile_likes_enabled': True, 'hidden_profile_subscriptions_enabled': True, @@ -258,3 +270,36 @@ 'responsive_web_graphql_timeline_navigation_enabled': True, 'responsive_web_enhance_cards_enabled': False } + + +CREATE_TWEET_FEATURES = { + 'premium_content_api_read_enabled': False, + 'communities_web_enable_tweet_community_results_fetch': True, + 'c9s_tweet_anatomy_moderator_badge_enabled': True, + 'responsive_web_grok_analyze_button_fetch_trends_enabled': False, + 'responsive_web_grok_analyze_post_followups_enabled': True, + 'responsive_web_jetfuel_frame': False, + 'responsive_web_grok_share_attachment_enabled': True, + 'responsive_web_edit_tweet_api_enabled': True, + 'graphql_is_translatable_rweb_tweet_is_translatable_enabled': True, + 'view_counts_everywhere_api_enabled': True, + 'longform_notetweets_consumption_enabled': True, + 'responsive_web_twitter_article_tweet_consumption_enabled': True, + 'tweet_awards_web_tipping_enabled': False, + 'creator_subscriptions_quote_tweet_preview_enabled': False, + 'longform_notetweets_rich_text_read_enabled': True, + 'longform_notetweets_inline_media_enabled': True, + 'profile_label_improvements_pcf_label_in_post_enabled': True, + 'rweb_tipjar_consumption_enabled': True, + 'responsive_web_graphql_exclude_directive_enabled': True, + 'verified_phone_label_enabled': False, + 'articles_preview_enabled': True, + 'rweb_video_timestamps_enabled': True, + 'responsive_web_graphql_skip_user_profile_image_extensions_enabled': False, + 'freedom_of_speech_not_reach_fetch_enabled': True, + 'standardized_nudges_misinfo': True, + 'tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled': True, + 'responsive_web_grok_image_annotation_enabled': False, + 'responsive_web_graphql_timeline_navigation_enabled': True, + 'responsive_web_enhance_cards_enabled': False +}