mirror of
https://github.com/thegeneralist01/twitter-openapi
synced 2026-01-11 15:40:26 +01:00
commit
8443ccfd7f
11 changed files with 3317 additions and 517 deletions
4
.vscode/launch.json
vendored
4
.vscode/launch.json
vendored
|
|
@ -26,7 +26,9 @@
|
|||
"justMyCode": false,
|
||||
"preLaunchTask": "build-task",
|
||||
"env": {
|
||||
"ERROR_UNCATCHED": "True"
|
||||
"ERROR_UNCATCHED": "True",
|
||||
"STRICT_MODE": "True",
|
||||
"MULTI_THREAD": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
1485
dist/compatible/openapi-3.0.yaml
vendored
1485
dist/compatible/openapi-3.0.yaml
vendored
File diff suppressed because it is too large
Load diff
1232
dist/docs/openapi-3.0.yaml
vendored
1232
dist/docs/openapi-3.0.yaml
vendored
File diff suppressed because it is too large
Load diff
BIN
requirements.txt
BIN
requirements.txt
Binary file not shown.
|
|
@ -1,15 +1,15 @@
|
|||
{
|
||||
"HomeTimeline": {
|
||||
"queryId": "vd1SSLv05a4lAc9-ml4kpA",
|
||||
"queryId": "AmMFotx7L4P3QnyOM3bCRA",
|
||||
"variables": {
|
||||
"count": 20,
|
||||
"includePromotedContent": true,
|
||||
"latestControlAvailable": true,
|
||||
"requestContext": "launch",
|
||||
"withCommunity": true,
|
||||
"seenTweetIds": [
|
||||
"1349129669258448897"
|
||||
],
|
||||
"withCommunity": true
|
||||
]
|
||||
},
|
||||
"features": {
|
||||
"responsive_web_graphql_exclude_directive_enabled": true,
|
||||
|
|
@ -17,16 +17,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -34,7 +36,7 @@
|
|||
}
|
||||
},
|
||||
"HomeLatestTimeline": {
|
||||
"queryId": "fKbuCe1XHAqSM99T6q-MOg",
|
||||
"queryId": "IjTuxEFmAb6DvzycVz4fHg",
|
||||
"variables": {
|
||||
"count": 20,
|
||||
"includePromotedContent": true,
|
||||
|
|
@ -47,16 +49,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -64,7 +68,7 @@
|
|||
}
|
||||
},
|
||||
"ListLatestTweetsTimeline": {
|
||||
"queryId": "qHgwF5h2HLowIJ6dHmAP_A",
|
||||
"queryId": "HjsWc-nwwHKYwHenbHm-tw",
|
||||
"variables": {
|
||||
"listId": "1539453138322673664",
|
||||
"count": 20
|
||||
|
|
@ -75,16 +79,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -92,7 +98,7 @@
|
|||
}
|
||||
},
|
||||
"UserByScreenName": {
|
||||
"queryId": "G3KGOASz96M-Qu0nwmGXNg",
|
||||
"queryId": "k5XapwcSikNsEsILW5FvgA",
|
||||
"variables": {
|
||||
"screen_name": "elonmusk",
|
||||
"withSafetyModeUserFields": true
|
||||
|
|
@ -105,6 +111,7 @@
|
|||
"subscriptions_verification_info_is_identity_verified_enabled": true,
|
||||
"subscriptions_verification_info_verified_since_enabled": true,
|
||||
"highlights_tweets_tab_ui_enabled": true,
|
||||
"responsive_web_twitter_article_notes_tab_enabled": true,
|
||||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true
|
||||
|
|
@ -114,7 +121,7 @@
|
|||
}
|
||||
},
|
||||
"UserByRestId": {
|
||||
"queryId": "QdS5LJDl99iL_KUzckdfNQ",
|
||||
"queryId": "tD8zKvQzwY3kdx5yz6YmOw",
|
||||
"variables": {
|
||||
"userId": "44196397",
|
||||
"withSafetyModeUserFields": true
|
||||
|
|
@ -125,13 +132,14 @@
|
|||
"responsive_web_graphql_exclude_directive_enabled": true,
|
||||
"verified_phone_label_enabled": false,
|
||||
"highlights_tweets_tab_ui_enabled": true,
|
||||
"responsive_web_twitter_article_notes_tab_enabled": true,
|
||||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true
|
||||
}
|
||||
},
|
||||
"UsersByRestIds": {
|
||||
"queryId": "GD4q8bBE2i6cqWw2iT74Gg",
|
||||
"queryId": "itEhGywpgX9b3GJCzOtSrA",
|
||||
"variables": {
|
||||
"userIds": [
|
||||
"44196397"
|
||||
|
|
@ -145,14 +153,14 @@
|
|||
}
|
||||
},
|
||||
"ProfileSpotlightsQuery": {
|
||||
"queryId": "_pnlqeTOtnpbIL9o-fS_pg",
|
||||
"queryId": "X-Sw7rvhcUhof35mh5ObKw",
|
||||
"variables": {
|
||||
"screen_name": "elonmusk"
|
||||
},
|
||||
"features": {}
|
||||
},
|
||||
"UserTweets": {
|
||||
"queryId": "H8OOoI-5ZE4NxgRr8lfyWg",
|
||||
"queryId": "5ICa5d9-AitXZrIA3H-4MQ",
|
||||
"variables": {
|
||||
"userId": "44196397",
|
||||
"count": 40,
|
||||
|
|
@ -167,16 +175,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -184,7 +194,7 @@
|
|||
}
|
||||
},
|
||||
"UserTweetsAndReplies": {
|
||||
"queryId": "Q6aAvPw7azXZbqXzuqTALA",
|
||||
"queryId": "UtLStR_BnYUGD7Q453UXQg",
|
||||
"variables": {
|
||||
"userId": "44196397",
|
||||
"count": 40,
|
||||
|
|
@ -199,16 +209,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -216,7 +228,7 @@
|
|||
}
|
||||
},
|
||||
"UserHighlightsTweets": {
|
||||
"queryId": "KTtT5_kU8yor3I3UI4G5Vw",
|
||||
"queryId": "ZRU-YBvpJ5c-SOS-nb_Lhg",
|
||||
"variables": {
|
||||
"userId": "44196397",
|
||||
"count": 40,
|
||||
|
|
@ -229,16 +241,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -246,7 +260,7 @@
|
|||
}
|
||||
},
|
||||
"UserMedia": {
|
||||
"queryId": "Le6KlbilFmSu-5VltFND-Q",
|
||||
"queryId": "tO4LMUYAZbR4T0SqQ85aAw",
|
||||
"variables": {
|
||||
"userId": "44196397",
|
||||
"count": 40,
|
||||
|
|
@ -262,16 +276,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -279,7 +295,7 @@
|
|||
}
|
||||
},
|
||||
"Likes": {
|
||||
"queryId": "lVf2NuhLoYVrpN4nO7uw0Q",
|
||||
"queryId": "9s8V6sUI8fZLDiN-REkAxA",
|
||||
"variables": {
|
||||
"userId": "44196397",
|
||||
"count": 20,
|
||||
|
|
@ -295,16 +311,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -312,7 +330,7 @@
|
|||
}
|
||||
},
|
||||
"Bookmarks": {
|
||||
"queryId": "j5KExFXtSWj8HjRui17ydA",
|
||||
"queryId": "cQxQgX8MJYjWwC0dxpyfYg",
|
||||
"variables": {
|
||||
"count": 20,
|
||||
"includePromotedContent": true
|
||||
|
|
@ -324,16 +342,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -341,9 +361,10 @@
|
|||
}
|
||||
},
|
||||
"TweetDetail": {
|
||||
"queryId": "xOhkmRac04YFZmOzU9PJHg",
|
||||
"queryId": "B9_KmbkLhXt6jRwGjJrweg",
|
||||
"variables": {
|
||||
"focalTweetId": "1349129669258448897",
|
||||
"referrer": "home",
|
||||
"with_rux_injections": false,
|
||||
"includePromotedContent": true,
|
||||
"withCommunity": true,
|
||||
|
|
@ -358,16 +379,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -378,7 +401,7 @@
|
|||
}
|
||||
},
|
||||
"TweetResultByRestId": {
|
||||
"queryId": "DJS3BdhUhcaEpZ7B7irJDg",
|
||||
"queryId": "MWY3AO9_I3rcP_L2A4FR4A",
|
||||
"variables": {
|
||||
"tweetId": "1691730070669517096",
|
||||
"withCommunity": false,
|
||||
|
|
@ -387,16 +410,18 @@
|
|||
},
|
||||
"features": {
|
||||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_graphql_exclude_directive_enabled": true,
|
||||
|
|
@ -408,7 +433,7 @@
|
|||
}
|
||||
},
|
||||
"SearchTimeline": {
|
||||
"queryId": "3Ej-6N7xXONuEp5eJa1TdQ",
|
||||
"queryId": "fZK7JipRHWtiZsTodhsTfQ",
|
||||
"variables": {
|
||||
"rawQuery": "elonmusk",
|
||||
"count": 20,
|
||||
|
|
@ -421,16 +446,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -438,7 +465,7 @@
|
|||
}
|
||||
},
|
||||
"Favoriters": {
|
||||
"queryId": "VIA2_af01oqZqBB6NvWi-Q",
|
||||
"queryId": "LLkw5EcVutJL6y-2gkz22A",
|
||||
"variables": {
|
||||
"tweetId": "1349129669258448897",
|
||||
"count": 20,
|
||||
|
|
@ -450,16 +477,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -467,7 +496,7 @@
|
|||
}
|
||||
},
|
||||
"Retweeters": {
|
||||
"queryId": "9jBdme5U626ATWp01dvgrA",
|
||||
"queryId": "X-XEqG5qHQSAwmvy00xfyQ",
|
||||
"variables": {
|
||||
"tweetId": "1349129669258448897",
|
||||
"count": 20,
|
||||
|
|
@ -479,16 +508,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -496,7 +527,7 @@
|
|||
}
|
||||
},
|
||||
"Followers": {
|
||||
"queryId": "rRXFSG5vR6drKr5M37YOTw",
|
||||
"queryId": "ZG1BQPaRSg04qo55kKaW2g",
|
||||
"variables": {
|
||||
"userId": "44196397",
|
||||
"count": 20,
|
||||
|
|
@ -508,16 +539,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -525,7 +558,7 @@
|
|||
}
|
||||
},
|
||||
"Following": {
|
||||
"queryId": "iSicc7LrzWGBgDPL0tM_TQ",
|
||||
"queryId": "PAnE9toEjRfE-4tozRcsfw",
|
||||
"variables": {
|
||||
"userId": "44196397",
|
||||
"count": 20,
|
||||
|
|
@ -537,16 +570,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -554,7 +589,7 @@
|
|||
}
|
||||
},
|
||||
"BlueVerifiedFollowers": {
|
||||
"queryId": "kXi37EbqWokFUNypPHhQDQ",
|
||||
"queryId": "mg4dFO4kMIKt6tpqPMmFeg",
|
||||
"variables": {
|
||||
"userId": "1347135745706708993",
|
||||
"count": 20,
|
||||
|
|
@ -566,16 +601,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -583,7 +620,7 @@
|
|||
}
|
||||
},
|
||||
"FollowersYouKnow": {
|
||||
"queryId": "yqrUptVSP9DAkVLqpc0lsg",
|
||||
"queryId": "citX7s5IAb1C6AVCqUO68g",
|
||||
"variables": {
|
||||
"userId": "44196397",
|
||||
"count": 20,
|
||||
|
|
@ -595,16 +632,18 @@
|
|||
"creator_subscriptions_tweet_preview_api_enabled": true,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||
"tweet_awards_web_tipping_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,
|
||||
"rweb_video_timestamps_enabled": true,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"longform_notetweets_inline_media_enabled": true,
|
||||
"responsive_web_media_download_video_enabled": false,
|
||||
|
|
@ -612,7 +651,7 @@
|
|||
}
|
||||
},
|
||||
"CreateTweet": {
|
||||
"queryId": "PIZtQLRIYtSa9AtW_fI2Mw",
|
||||
"queryId": "8ED1SMuUGkOZVBEjiYUTfw",
|
||||
"variables": {
|
||||
"tweet_text": "test",
|
||||
"media": {
|
||||
|
|
@ -632,15 +671,17 @@
|
|||
"dark_request": false
|
||||
},
|
||||
"features": {
|
||||
"c9s_tweet_anatomy_moderator_badge_enabled": true,
|
||||
"tweetypie_unmention_optimization_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": false,
|
||||
"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,
|
||||
"freedom_of_speech_not_reach_fetch_enabled": true,
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ components:
|
|||
- kind
|
||||
- name
|
||||
- source
|
||||
- retry_after
|
||||
- tracing
|
||||
properties:
|
||||
message:
|
||||
|
|
@ -54,6 +55,8 @@ components:
|
|||
type: string
|
||||
source:
|
||||
type: string
|
||||
retry_after:
|
||||
type: integer
|
||||
tracing:
|
||||
$ref: "#/components/schemas/Tracing"
|
||||
|
||||
|
|
|
|||
|
|
@ -71,16 +71,21 @@ components:
|
|||
header:
|
||||
type: object
|
||||
additionalProperties: true # todo
|
||||
|
||||
clientEventInfo:
|
||||
type: object
|
||||
additionalProperties: true # todo
|
||||
metadata:
|
||||
type: object
|
||||
additionalProperties: true # todo
|
||||
feedbackInfo:
|
||||
$ref: "#/components/schemas/FeedbackInfo"
|
||||
|
||||
TimelineTimelineCursor:
|
||||
required:
|
||||
- "__typename"
|
||||
- "cursorType"
|
||||
- "value"
|
||||
- "stopOnEmptyResponse"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # TimelineTimelineCursor
|
||||
|
|
@ -92,6 +97,19 @@ components:
|
|||
$ref: "#/components/schemas/CursorType"
|
||||
value:
|
||||
type: string
|
||||
stopOnEmptyResponse:
|
||||
type: boolean
|
||||
default: false
|
||||
displayTreatment:
|
||||
$ref: "#/components/schemas/DisplayTreatment"
|
||||
|
||||
DisplayTreatment:
|
||||
type: object
|
||||
required:
|
||||
- "actionText"
|
||||
properties:
|
||||
actionText:
|
||||
type: string
|
||||
|
||||
# ================= Module =================
|
||||
|
||||
|
|
@ -115,6 +133,15 @@ components:
|
|||
itemContent:
|
||||
$ref: "#/components/schemas/ItemContentUnion"
|
||||
|
||||
FeedbackInfo:
|
||||
required:
|
||||
- "feedbackType"
|
||||
properties:
|
||||
feedbackKeys:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
|
||||
# ================= ContentItem =================
|
||||
|
||||
ItemContentUnion:
|
||||
|
|
@ -163,17 +190,18 @@ components:
|
|||
type: string
|
||||
tweet_results:
|
||||
$ref: "#/components/schemas/ItemResult"
|
||||
SocialContext:
|
||||
$ref: "#/components/schemas/SocialContext"
|
||||
socialContext:
|
||||
$ref: "#/components/schemas/SocialContextUnion"
|
||||
promotedMetadata:
|
||||
type: object
|
||||
additionalProperties: true # todo
|
||||
highlights:
|
||||
$ref: "#/components/schemas/Highlight"
|
||||
|
||||
TimelineUser:
|
||||
required:
|
||||
- "__typename"
|
||||
- "itemType"
|
||||
- "socialContext"
|
||||
- "userDisplayType"
|
||||
- "user_results"
|
||||
properties:
|
||||
|
|
@ -181,8 +209,8 @@ components:
|
|||
$ref: "./typename.yaml#/components/schemas/TypeName" # TimelineUser
|
||||
itemType:
|
||||
$ref: "#/components/schemas/ContentItemType" # TimelineUser
|
||||
SocialContext:
|
||||
$ref: "#/components/schemas/SocialContext"
|
||||
socialContext:
|
||||
$ref: "#/components/schemas/SocialContextUnion"
|
||||
userDisplayType:
|
||||
type: string
|
||||
enum: [User, UserDetailed, SubscribableUser]
|
||||
|
|
@ -196,15 +224,122 @@ components:
|
|||
result:
|
||||
$ref: "./tweet.yaml#/components/schemas/TweetUnion"
|
||||
|
||||
SocialContext:
|
||||
SocialContextUnion:
|
||||
oneOf:
|
||||
- $ref: "#/components/schemas/TimelineGeneralContext"
|
||||
- $ref: "#/components/schemas/TimelineTopicContext"
|
||||
discriminator:
|
||||
propertyName: type
|
||||
mapping": # deprecated
|
||||
TimelineGeneralContext: "#/components/schemas/TimelineGeneralContext"
|
||||
TimelineTopicContext: "#/components/schemas/TimelineTopicContext"
|
||||
|
||||
SocialContextUnionType:
|
||||
type: string
|
||||
enum:
|
||||
- TimelineGeneralContext
|
||||
- TimelineTopicContext
|
||||
|
||||
|
||||
TimelineGeneralContext:
|
||||
type: object
|
||||
properties:
|
||||
type:
|
||||
$ref: "#/components/schemas/SocialContextUnionType"
|
||||
contextType:
|
||||
type: string # enum
|
||||
enum: ["Follow", "Pin", "Like", "Location", "Sparkle"]
|
||||
text:
|
||||
type: string
|
||||
landingUrl:
|
||||
$ref: "#/components/schemas/SocialContextLandingUrl"
|
||||
|
||||
TimelineTopicContext:
|
||||
type: object
|
||||
properties:
|
||||
type:
|
||||
$ref: "#/components/schemas/SocialContextUnionType"
|
||||
topic:
|
||||
$ref: "#/components/schemas/TopicContext"
|
||||
functionalityType:
|
||||
type: string
|
||||
enum: ["Basic"]
|
||||
|
||||
TopicContext:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
topic_id:
|
||||
type: string
|
||||
name:
|
||||
type: string
|
||||
description:
|
||||
type: string
|
||||
icon_url:
|
||||
type: string
|
||||
format: uri
|
||||
following:
|
||||
type: boolean
|
||||
not_interested:
|
||||
type: boolean
|
||||
|
||||
SocialContextLandingUrl:
|
||||
type: object
|
||||
properties:
|
||||
urlType:
|
||||
type: string # enum
|
||||
enum: ["DeepLink", "UrtEndpoint"]
|
||||
url:
|
||||
type: string # twitter://user?id=900282258736545792
|
||||
format: uri
|
||||
urtEndpointOptions:
|
||||
$ref: "#/components/schemas/UrtEndpointOptions"
|
||||
|
||||
UrtEndpointOptions:
|
||||
type: object
|
||||
required:
|
||||
- "title"
|
||||
- "requestParams"
|
||||
properties:
|
||||
title:
|
||||
type: string
|
||||
requestParams:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/UrtEndpointRequestParams"
|
||||
|
||||
UrtEndpointRequestParams:
|
||||
type: object
|
||||
required:
|
||||
- "key"
|
||||
- "value"
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
value:
|
||||
type: string
|
||||
|
||||
Highlight:
|
||||
type: object
|
||||
required:
|
||||
- "textHighlights"
|
||||
properties:
|
||||
textHighlights:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/TextHighlight"
|
||||
|
||||
TextHighlight:
|
||||
type: object
|
||||
required:
|
||||
- "startIndex"
|
||||
- "endIndex"
|
||||
properties:
|
||||
startIndex:
|
||||
type: integer
|
||||
endIndex:
|
||||
type: integer
|
||||
|
||||
TimelinePrompt:
|
||||
properties:
|
||||
|
|
|
|||
|
|
@ -23,11 +23,94 @@ components:
|
|||
required:
|
||||
- "__typename"
|
||||
- "tweet"
|
||||
- "limitedActionResults"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # TweetWithVisibilityResults
|
||||
tweet:
|
||||
$ref: "#/components/schemas/Tweet"
|
||||
limitedActionResults:
|
||||
type: object
|
||||
additionalProperties: true # todo
|
||||
tweetInterstitial:
|
||||
$ref: "#/components/schemas/TweetInterstitial"
|
||||
|
||||
# {'__typename': 'ContextualTweetInterstitial', 'displayType': 'NonCompliant', 'text': {'rtl': False, 'text': 'This Post violated the X Rules. However, X has determined that it may be in the public’s interest for the Post to remain accessible. Learn more', 'entities': [{'fromIndex': 133, 'toIndex': 143, 'ref': {'type': 'TimelineUrl', 'url': 'https://help.twitter.com/rules-and-policies/public-interest', 'urlType': 'ExternalUrl'}}]}, 'revealText': {'rtl': False, 'text': 'View', 'entities': []}}
|
||||
TweetInterstitial:
|
||||
required:
|
||||
- "__typename"
|
||||
- "displayType"
|
||||
- "text"
|
||||
- "revealText"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # ContextualTweetInterstitial
|
||||
displayType:
|
||||
type: string
|
||||
enum: [NonCompliant]
|
||||
text:
|
||||
$ref: "#/components/schemas/TweetInterstitialText"
|
||||
revealText:
|
||||
$ref: "#/components/schemas/TweetInterstitialRevealText"
|
||||
|
||||
TweetInterstitialText:
|
||||
required:
|
||||
- "rtl"
|
||||
- "text"
|
||||
- "entities"
|
||||
properties:
|
||||
rtl:
|
||||
type: boolean
|
||||
text:
|
||||
type: string
|
||||
entities:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/TweetInterstitialTextEntity"
|
||||
|
||||
TweetInterstitialTextEntity:
|
||||
required:
|
||||
- "fromIndex"
|
||||
- "toIndex"
|
||||
- "ref"
|
||||
properties:
|
||||
fromIndex:
|
||||
type: integer
|
||||
toIndex:
|
||||
type: integer
|
||||
ref:
|
||||
$ref: "#/components/schemas/TweetInterstitialTextEntityRef"
|
||||
|
||||
TweetInterstitialTextEntityRef:
|
||||
required:
|
||||
- "type"
|
||||
- "url"
|
||||
- "urlType"
|
||||
properties:
|
||||
type:
|
||||
type: string
|
||||
enum: [TimelineUrl]
|
||||
url:
|
||||
type: string
|
||||
format: uri
|
||||
urlType:
|
||||
type: string
|
||||
enum: [ExternalUrl]
|
||||
|
||||
TweetInterstitialRevealText:
|
||||
required:
|
||||
- "rtl"
|
||||
- "text"
|
||||
- "entities"
|
||||
properties:
|
||||
rtl:
|
||||
type: boolean
|
||||
text:
|
||||
type: string
|
||||
entities:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/TweetInterstitialTextEntity"
|
||||
|
||||
TweetTombstone: #remove tweet
|
||||
properties:
|
||||
|
|
@ -45,7 +128,6 @@ components:
|
|||
# - "source"
|
||||
# - "legacy"
|
||||
- "views"
|
||||
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # null | Tweet
|
||||
|
|
@ -80,6 +162,18 @@ components:
|
|||
$ref: "#/components/schemas/NoteTweet"
|
||||
quick_promote_eligibility:
|
||||
type: object
|
||||
unified_card:
|
||||
$ref: "#/components/schemas/UnifiedCard"
|
||||
previous_counts:
|
||||
$ref: "#/components/schemas/TweetPreviousCounts"
|
||||
quotedRefResult:
|
||||
$ref: "#/components/schemas/QuotedRefResult"
|
||||
superFollowsReplyUserResult:
|
||||
$ref: "#/components/schemas/SuperFollowsReplyUserResult"
|
||||
has_birdwatch_notes:
|
||||
type: boolean
|
||||
author_community_relationship:
|
||||
$ref: "#/components/schemas/AuthorCommunityRelationship"
|
||||
|
||||
TweetEditControl:
|
||||
properties:
|
||||
|
|
@ -220,6 +314,299 @@ components:
|
|||
type: string
|
||||
enum: [Bold, Italic]
|
||||
|
||||
UnifiedCard:
|
||||
required:
|
||||
- "card_fetch_state"
|
||||
properties:
|
||||
card_fetch_state:
|
||||
type: string
|
||||
enum: [NoCard]
|
||||
|
||||
TweetPreviousCounts:
|
||||
required:
|
||||
- "bookmark_count"
|
||||
- "favorite_count"
|
||||
- "quote_count"
|
||||
- "reply_count"
|
||||
- "retweet_count"
|
||||
properties:
|
||||
bookmark_count:
|
||||
type: integer
|
||||
favorite_count:
|
||||
type: integer
|
||||
quote_count:
|
||||
type: integer
|
||||
reply_count:
|
||||
type: integer
|
||||
retweet_count:
|
||||
type: integer
|
||||
|
||||
QuotedRefResult:
|
||||
required:
|
||||
- "result"
|
||||
properties:
|
||||
result:
|
||||
$ref: "#/components/schemas/QuotedRefResultData"
|
||||
|
||||
QuotedRefResultData:
|
||||
required:
|
||||
- "__typename"
|
||||
- "rest_id"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # Tweet
|
||||
rest_id:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
|
||||
SuperFollowsReplyUserResult:
|
||||
required:
|
||||
- "result"
|
||||
properties:
|
||||
result:
|
||||
$ref: "#/components/schemas/SuperFollowsReplyUserResultData"
|
||||
|
||||
SuperFollowsReplyUserResultData:
|
||||
required:
|
||||
- "__typename"
|
||||
- "legacy"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./../schemas/typename.yaml#/components/schemas/TypeName" # User
|
||||
legacy:
|
||||
$ref: "#/components/schemas/SuperFollowsReplyUserResultLegacy"
|
||||
|
||||
SuperFollowsReplyUserResultLegacy:
|
||||
required:
|
||||
- "screen_name"
|
||||
properties:
|
||||
screen_name:
|
||||
type: string
|
||||
|
||||
AuthorCommunityRelationship:
|
||||
required:
|
||||
- "community_results"
|
||||
properties:
|
||||
community_results:
|
||||
$ref: "#/components/schemas/Community"
|
||||
role:
|
||||
type: string
|
||||
enum: [Member]
|
||||
user_results:
|
||||
$ref: "user.yaml#/components/schemas/UserResults"
|
||||
|
||||
Community:
|
||||
required:
|
||||
- "result"
|
||||
properties:
|
||||
result:
|
||||
$ref: "#/components/schemas/CommunityData"
|
||||
|
||||
CommunityData:
|
||||
required:
|
||||
- "__typename"
|
||||
- "id_str"
|
||||
- "name"
|
||||
- "description"
|
||||
- "question"
|
||||
- "search_tags"
|
||||
- "primary_community_topic"
|
||||
- "actions"
|
||||
- "admin_results"
|
||||
- "creator_results"
|
||||
- "invites_result"
|
||||
- "join_policy"
|
||||
- "invites_policy"
|
||||
- "is_pinned"
|
||||
- "members_facepile_results"
|
||||
- "moderator_count"
|
||||
- "member_count"
|
||||
- "role"
|
||||
- "rules"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # Community
|
||||
id_str:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
name:
|
||||
type: string
|
||||
description:
|
||||
type: string
|
||||
created_at:
|
||||
type: integer
|
||||
question:
|
||||
type: string
|
||||
search_tags:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
primary_community_topic:
|
||||
$ref: "#/components/schemas/PrimaryCommunityTopic"
|
||||
actions:
|
||||
$ref: "#/components/schemas/CommunityActions"
|
||||
admin_results:
|
||||
$ref: "user.yaml#/components/schemas/UserResults"
|
||||
creator_results:
|
||||
$ref: "user.yaml#/components/schemas/UserResults"
|
||||
invites_result:
|
||||
$ref: "#/components/schemas/CommunityInvitesResult"
|
||||
join_requests_result:
|
||||
$ref: "#/components/schemas/CommunityJoinRequestsResult"
|
||||
join_policy:
|
||||
type: string
|
||||
enum: [Open]
|
||||
invites_policy:
|
||||
type: string
|
||||
enum: [MemberInvitesAllowed]
|
||||
is_pinned:
|
||||
type: boolean
|
||||
members_facepile_results:
|
||||
type: array
|
||||
items:
|
||||
$ref: "user.yaml#/components/schemas/UserResults"
|
||||
moderator_count:
|
||||
type: integer
|
||||
member_count:
|
||||
type: integer
|
||||
role:
|
||||
type: string
|
||||
enum: [NonMember]
|
||||
rules:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/CommunityRule"
|
||||
show_only_users_to_display:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
urls:
|
||||
$ref: "#/components/schemas/CommunityUrls"
|
||||
default_banner_media:
|
||||
type: object
|
||||
additionalProperties: true # todo
|
||||
custom_banner_media:
|
||||
type: object
|
||||
additionalProperties: true # todo
|
||||
viewer_relationship:
|
||||
type: object
|
||||
additionalProperties: true # todo
|
||||
|
||||
PrimaryCommunityTopic:
|
||||
required:
|
||||
- "topic_id"
|
||||
- "topic_name"
|
||||
properties:
|
||||
topic_id:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
topic_name:
|
||||
type: string
|
||||
|
||||
CommunityActions:
|
||||
required:
|
||||
- "delete_action_result"
|
||||
- "join_action_result"
|
||||
- "leave_action_result"
|
||||
- "pin_action_result"
|
||||
properties:
|
||||
delete_action_result:
|
||||
$ref: "#/components/schemas/CommunityDeleteActionResult"
|
||||
join_action_result:
|
||||
$ref: "#/components/schemas/CommunityJoinActionResult"
|
||||
leave_action_result:
|
||||
$ref: "#/components/schemas/CommunityLeaveActionResult"
|
||||
pin_action_result:
|
||||
$ref: "#/components/schemas/CommunityPinActionResult"
|
||||
|
||||
CommunityDeleteActionResult:
|
||||
required:
|
||||
- "__typename"
|
||||
- "reason"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # CommunityDeleteActionUnavailable
|
||||
reason:
|
||||
type: string
|
||||
enum: [Unavailable]
|
||||
|
||||
CommunityJoinActionResult:
|
||||
required:
|
||||
- "__typename"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # CommunityJoinAction
|
||||
|
||||
CommunityLeaveActionResult:
|
||||
required:
|
||||
- "__typename"
|
||||
- "reason"
|
||||
- "message"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # CommunityLeaveActionUnavailable
|
||||
reason:
|
||||
type: string
|
||||
enum: [ViewerNotMember]
|
||||
message:
|
||||
type: string
|
||||
|
||||
CommunityPinActionResult:
|
||||
required:
|
||||
- "__typename"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # CommunityTweetPinActionUnavailable
|
||||
|
||||
CommunityInvitesResult:
|
||||
required:
|
||||
- "__typename"
|
||||
- "reason"
|
||||
- "message"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # CommunityInvitesUnavailable
|
||||
reason:
|
||||
type: string
|
||||
enum: [Unavailable]
|
||||
message:
|
||||
type: string
|
||||
|
||||
CommunityJoinRequestsResult:
|
||||
required:
|
||||
- "__typename"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # CommunityJoinRequestsUnavailable
|
||||
|
||||
CommunityRule:
|
||||
required:
|
||||
- "rest_id"
|
||||
- "name"
|
||||
properties:
|
||||
rest_id:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
name:
|
||||
type: string
|
||||
description:
|
||||
type: string
|
||||
|
||||
CommunityUrls:
|
||||
required:
|
||||
- "permalink"
|
||||
properties:
|
||||
permalink:
|
||||
$ref: "#/components/schemas/CommunityUrlsPermalink"
|
||||
|
||||
CommunityUrlsPermalink:
|
||||
required:
|
||||
- "url"
|
||||
properties:
|
||||
url:
|
||||
type: string
|
||||
format: uri
|
||||
|
||||
BirdwatchPivot:
|
||||
required:
|
||||
- "destinationUrl"
|
||||
|
|
@ -249,6 +636,8 @@ components:
|
|||
iconType:
|
||||
type: string
|
||||
enum: [BirdwatchV1Icon]
|
||||
callToAction:
|
||||
$ref: "#/components/schemas/BirdwatchPivotCallToAction"
|
||||
|
||||
BirdwatchPivotFooter:
|
||||
required:
|
||||
|
|
@ -311,6 +700,21 @@ components:
|
|||
items:
|
||||
$ref: "#/components/schemas/BirdwatchEntity"
|
||||
|
||||
BirdwatchPivotCallToAction:
|
||||
# {'prompt': 'Do you find this helpful?', 'title': 'Rate it', 'destinationUrl': 'https://twitter.com/i/birdwatch/n/1710821689636934115'}
|
||||
required:
|
||||
- "prompt"
|
||||
- "title"
|
||||
- "destinationUrl"
|
||||
properties:
|
||||
prompt:
|
||||
type: string
|
||||
title:
|
||||
type: string
|
||||
destinationUrl:
|
||||
type: string
|
||||
format: uri
|
||||
|
||||
TweetCard:
|
||||
properties:
|
||||
rest_id:
|
||||
|
|
@ -333,6 +737,50 @@ components:
|
|||
items:
|
||||
$ref: "#/components/schemas/TweetCardLegacyBindingValue"
|
||||
|
||||
# {'platform': {'audience': {'name': 'production'}, 'device': {'name': 'Swift', 'version': '12'}}}
|
||||
card_platform:
|
||||
$ref: "#/components/schemas/TweetCardPlatformData"
|
||||
user_refs_results:
|
||||
type: array
|
||||
items:
|
||||
$ref: "user.yaml#/components/schemas/UserResults"
|
||||
|
||||
TweetCardPlatformData:
|
||||
required:
|
||||
- "platform"
|
||||
properties:
|
||||
platform:
|
||||
$ref: "#/components/schemas/TweetCardPlatform"
|
||||
|
||||
TweetCardPlatform:
|
||||
required:
|
||||
- "audience"
|
||||
- "device"
|
||||
properties:
|
||||
audience:
|
||||
$ref: "#/components/schemas/TweetCardPlatformAudience"
|
||||
device:
|
||||
$ref: "#/components/schemas/TweetCardPlatformDevice"
|
||||
|
||||
TweetCardPlatformAudience:
|
||||
required:
|
||||
- "name"
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
enum: [production]
|
||||
|
||||
TweetCardPlatformDevice:
|
||||
required:
|
||||
- "name"
|
||||
- "version"
|
||||
properties:
|
||||
name:
|
||||
type: string # enum Swift
|
||||
version:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
|
||||
TweetCardLegacyBindingValue:
|
||||
required:
|
||||
- "key"
|
||||
|
|
@ -355,6 +803,37 @@ components:
|
|||
type: string
|
||||
type:
|
||||
type: string
|
||||
image_value:
|
||||
$ref: "#/components/schemas/TweetCardLegacyBindingValueDataImage"
|
||||
image_color_value:
|
||||
type: object
|
||||
additionalProperties: true # todo
|
||||
user_value:
|
||||
$ref: "#/components/schemas/UserValue"
|
||||
|
||||
UserValue:
|
||||
required:
|
||||
- "id_str"
|
||||
properties:
|
||||
id_str:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
|
||||
TweetCardLegacyBindingValueDataImage:
|
||||
required:
|
||||
- "height"
|
||||
- "width"
|
||||
- "url"
|
||||
properties:
|
||||
height:
|
||||
type: integer
|
||||
width:
|
||||
type: integer
|
||||
url:
|
||||
type: string
|
||||
format: uri
|
||||
alt:
|
||||
type: string
|
||||
|
||||
TweetLegacy:
|
||||
required:
|
||||
|
|
@ -427,6 +906,32 @@ components:
|
|||
$ref: "#/components/schemas/SelfThread"
|
||||
extended_entities:
|
||||
$ref: "#/components/schemas/ExtendedEntities"
|
||||
scopes:
|
||||
$ref: "#/components/schemas/TweetLegacyScopes"
|
||||
in_reply_to_screen_name:
|
||||
type: string
|
||||
in_reply_to_status_id_str:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
in_reply_to_user_id_str:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
quoted_status_permalink:
|
||||
$ref: "#/components/schemas/QuotedStatusPermalink"
|
||||
quoted_status_id_str:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
conversation_control:
|
||||
additionalProperties: true # todo
|
||||
limited_actions:
|
||||
type: string
|
||||
enum:
|
||||
- "limited_replies"
|
||||
- "community_tweet_non_member_public_community"
|
||||
- "non_compliant"
|
||||
- "dynamic_product_ad"
|
||||
place:
|
||||
additionalProperties: true # todo
|
||||
|
||||
SelfThread:
|
||||
required:
|
||||
|
|
@ -506,6 +1011,8 @@ components:
|
|||
# - "features"
|
||||
- "sizes"
|
||||
- "original_info"
|
||||
- "media_key"
|
||||
- "ext_media_availability"
|
||||
properties:
|
||||
display_url:
|
||||
type: string
|
||||
|
|
@ -535,6 +1042,47 @@ components:
|
|||
$ref: "#/components/schemas/MediaSizes"
|
||||
original_info:
|
||||
$ref: "#/components/schemas/MediaOriginalInfo"
|
||||
media_key:
|
||||
type: string
|
||||
ext_media_availability:
|
||||
$ref: "#/components/schemas/ExtMediaAvailability"
|
||||
video_info:
|
||||
type: object
|
||||
additionalProperties: true # todo
|
||||
additional_media_info:
|
||||
type: object
|
||||
additionalProperties: true # todo
|
||||
source_user_id_str:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
source_status_id_str:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
ext_alt_text:
|
||||
type: string
|
||||
|
||||
TweetLegacyScopes:
|
||||
required:
|
||||
- "followers"
|
||||
properties:
|
||||
followers:
|
||||
type: boolean
|
||||
|
||||
QuotedStatusPermalink:
|
||||
required:
|
||||
- "url"
|
||||
- "expanded"
|
||||
- "display"
|
||||
properties:
|
||||
url:
|
||||
type: string
|
||||
format: uri
|
||||
expanded:
|
||||
type: string
|
||||
format: uri
|
||||
display:
|
||||
type: string
|
||||
format: uri
|
||||
|
||||
ExtendedEntities:
|
||||
required:
|
||||
|
|
@ -587,9 +1135,9 @@ components:
|
|||
additional_media_info:
|
||||
$ref: "#/components/schemas/AdditionalMediaInfo"
|
||||
mediaStats:
|
||||
$ref: "#/components/schemas/mediaStats"
|
||||
$ref: "#/components/schemas/MediaStats"
|
||||
ext_media_availability:
|
||||
$ref: "#/components/schemas/extMediaAvailability"
|
||||
$ref: "#/components/schemas/ExtMediaAvailability"
|
||||
features:
|
||||
type: object
|
||||
sizes:
|
||||
|
|
@ -598,6 +1146,14 @@ components:
|
|||
$ref: "#/components/schemas/MediaOriginalInfo"
|
||||
video_info:
|
||||
$ref: "#/components/schemas/MediaVideoInfo"
|
||||
source_user_id_str:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
source_status_id_str:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
ext_alt_text:
|
||||
type: string
|
||||
|
||||
MediaOriginalInfo:
|
||||
required:
|
||||
|
|
@ -665,15 +1221,40 @@ components:
|
|||
properties:
|
||||
monetizable:
|
||||
type: boolean
|
||||
source_user:
|
||||
$ref: "./user.yaml#/components/schemas/UserResultCore"
|
||||
title: # null character
|
||||
type: string
|
||||
description: # null character
|
||||
type: string
|
||||
embeddable:
|
||||
type: boolean
|
||||
call_to_actions:
|
||||
$ref: "#/components/schemas/AdditionalMediaInfoCallToActions"
|
||||
|
||||
mediaStats:
|
||||
AdditionalMediaInfoCallToActions:
|
||||
required:
|
||||
- "visit_site"
|
||||
properties:
|
||||
visit_site:
|
||||
$ref: "#/components/schemas/AdditionalMediaInfoCallToActionsVisitSite"
|
||||
|
||||
AdditionalMediaInfoCallToActionsVisitSite:
|
||||
required:
|
||||
- "url"
|
||||
properties:
|
||||
url:
|
||||
type: string
|
||||
format: uri
|
||||
|
||||
MediaStats:
|
||||
required:
|
||||
- "viewCount"
|
||||
properties:
|
||||
viewCount:
|
||||
type: integer
|
||||
|
||||
extMediaAvailability:
|
||||
ExtMediaAvailability:
|
||||
# required:
|
||||
# - "status"
|
||||
properties:
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ components:
|
|||
TimelineUser,
|
||||
TimelineTimelineCursor,
|
||||
TweetWithVisibilityResults,
|
||||
ContextualTweetInterstitial,
|
||||
TimelineTimelineModule,
|
||||
TweetTombstone,
|
||||
TimelinePrompt,
|
||||
|
|
@ -23,4 +24,11 @@ components:
|
|||
Tweet,
|
||||
User,
|
||||
UserUnavailable,
|
||||
Community,
|
||||
CommunityDeleteActionUnavailable,
|
||||
CommunityJoinAction,
|
||||
CommunityLeaveActionUnavailable,
|
||||
CommunityTweetPinActionUnavailable,
|
||||
CommunityInvitesUnavailable,
|
||||
CommunityJoinRequestsUnavailable,
|
||||
]
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ components:
|
|||
- "super_follow_eligible"
|
||||
- "super_followed_by"
|
||||
- "super_following"
|
||||
- "profile_image_shape"
|
||||
|
||||
properties:
|
||||
__typename:
|
||||
|
|
@ -73,6 +74,125 @@ components:
|
|||
super_following:
|
||||
type: boolean
|
||||
default: false
|
||||
profile_image_shape:
|
||||
type: string
|
||||
enum:
|
||||
- "Circle"
|
||||
- "Square"
|
||||
- "Hexagon"
|
||||
professional:
|
||||
$ref: "#/components/schemas/UserProfessional"
|
||||
user_seed_tweet_count:
|
||||
type: integer
|
||||
highlights_info:
|
||||
$ref: "#/components/schemas/UserHighlightsInfo"
|
||||
creator_subscriptions_count:
|
||||
type: integer
|
||||
verification_info:
|
||||
$ref: "#/components/schemas/UserVerificationInfo"
|
||||
is_profile_translatable:
|
||||
type: boolean
|
||||
|
||||
UserProfessional:
|
||||
required:
|
||||
- "rest_id"
|
||||
- "professional_type"
|
||||
- "category"
|
||||
properties:
|
||||
rest_id:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
professional_type:
|
||||
type: string
|
||||
enum: ["Business", "Creator"]
|
||||
category:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/UserProfessionalCategory"
|
||||
|
||||
UserProfessionalCategory:
|
||||
required:
|
||||
- "id"
|
||||
- "name"
|
||||
- "icon_name"
|
||||
properties:
|
||||
id:
|
||||
type: integer
|
||||
name:
|
||||
type: string # enum
|
||||
icon_name:
|
||||
type: string # IconBriefcaseStroke ?
|
||||
|
||||
UserHighlightsInfo:
|
||||
required:
|
||||
- "can_highlight_tweets"
|
||||
- "highlighted_tweets"
|
||||
properties:
|
||||
can_highlight_tweets:
|
||||
type: boolean
|
||||
highlighted_tweets:
|
||||
type: string
|
||||
|
||||
UserVerificationInfo:
|
||||
required:
|
||||
- "is_identity_verified"
|
||||
properties:
|
||||
is_identity_verified:
|
||||
type: boolean
|
||||
default: false
|
||||
reason:
|
||||
$ref: "#/components/schemas/UserVerificationInfoReason"
|
||||
|
||||
UserVerificationInfoReason:
|
||||
required:
|
||||
- "description"
|
||||
- "verified_since_msec"
|
||||
- "override_verified_year"
|
||||
properties:
|
||||
description:
|
||||
$ref: "#/components/schemas/UserVerificationInfoReasonDescription"
|
||||
verified_since_msec:
|
||||
type: string
|
||||
pattern: "^-?[0-9]+$"
|
||||
override_verified_year:
|
||||
type: integer
|
||||
|
||||
UserVerificationInfoReasonDescription:
|
||||
required:
|
||||
- "text"
|
||||
- "entities"
|
||||
properties:
|
||||
text:
|
||||
type: string
|
||||
entities:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/UserVerificationInfoReasonDescriptionEntities"
|
||||
|
||||
UserVerificationInfoReasonDescriptionEntities:
|
||||
required:
|
||||
- "from_index"
|
||||
- "to_index"
|
||||
- "ref"
|
||||
properties:
|
||||
from_index:
|
||||
type: integer
|
||||
to_index:
|
||||
type: integer
|
||||
ref:
|
||||
$ref: "#/components/schemas/UserVerificationInfoReasonDescriptionEntitiesRef"
|
||||
|
||||
UserVerificationInfoReasonDescriptionEntitiesRef:
|
||||
required:
|
||||
- "url"
|
||||
- "url_type"
|
||||
properties:
|
||||
url:
|
||||
type: string
|
||||
format: uri
|
||||
url_type:
|
||||
type: string
|
||||
enum: ["ExternalUrl"]
|
||||
|
||||
UserLegacy:
|
||||
required:
|
||||
|
|
@ -219,6 +339,13 @@ components:
|
|||
want_retweets:
|
||||
type: boolean
|
||||
default: false
|
||||
verified_type:
|
||||
type: string
|
||||
enum: ["Business", "Government"]
|
||||
withheld_in_countries:
|
||||
type: array
|
||||
items:
|
||||
type: string # enum DE
|
||||
|
||||
UserUnavailable:
|
||||
required:
|
||||
|
|
|
|||
|
|
@ -6,11 +6,13 @@ import logging
|
|||
import os
|
||||
import time
|
||||
import traceback
|
||||
import warnings
|
||||
from pathlib import Path
|
||||
|
||||
import aenum
|
||||
import openapi_client as pt
|
||||
|
||||
warnings.filterwarnings("ignore")
|
||||
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s %(levelname)s %(message)s")
|
||||
logger = logging.getLogger("test_serialize")
|
||||
|
||||
|
|
@ -19,6 +21,7 @@ ERROR_UNCATCHED = os.environ.get("ERROR_UNCATCHED", "false").lower() == "true"
|
|||
SLEEP_TIME = float(os.environ.get("SLEEP", "0"))
|
||||
CUESOR_TEST_COUNT = int(os.environ.get("CUESOR_TEST_COUNT", "3"))
|
||||
STRICT_MODE = os.environ.get("STRICT_MODE", "false").lower() == "true"
|
||||
MULTI_THREAD = os.environ.get("MULTI_THREAD", "true").lower() == "true"
|
||||
|
||||
|
||||
def get_key(snake_str):
|
||||
|
|
@ -62,13 +65,25 @@ def get_kwargs(key, additional):
|
|||
return kwargs
|
||||
|
||||
|
||||
def match_rate_zero(key):
|
||||
def match_rate_zero(a, b, base, key):
|
||||
def get(obj, key):
|
||||
if isinstance(obj, list):
|
||||
return get(obj[key[0]], key[1:])
|
||||
if obj.__dict__.get("actual_instance") is not None:
|
||||
return get(obj.actual_instance, key)
|
||||
if len(key) == 0:
|
||||
return obj
|
||||
return get(super_get(obj.__dict__, key[0]), key[1:])
|
||||
|
||||
if STRICT_MODE:
|
||||
raise Exception(f"Strict mode: {key}")
|
||||
obj_name = type(get(base, key[:-1]))
|
||||
obj_key = f"{obj_name.__name__}.{key[-1]}"
|
||||
raise Exception(f"Not defined: {obj_key}\nContents: {b}")
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
def match_rate(a, b, key=""):
|
||||
def match_rate(a, b, base, key=""):
|
||||
if isinstance(a, aenum.Enum):
|
||||
a = a.value
|
||||
if isinstance(b, aenum.Enum):
|
||||
|
|
@ -77,26 +92,30 @@ def match_rate(a, b, key=""):
|
|||
return 1
|
||||
if a is False and b is None:
|
||||
return 1
|
||||
if isinstance(a, list):
|
||||
data = [match_rate(a[i], b[i], key=f"{key}[{i}]") for i in range(len(a))]
|
||||
if a is None and isinstance(b, list) and len(b) == 0:
|
||||
return 1
|
||||
if isinstance(a, list) and b is None and len(a) == 0:
|
||||
return 1
|
||||
if a is None and isinstance(b, dict) and len(b) == 0:
|
||||
return 1
|
||||
if isinstance(a, dict) and b is None and len(a) == 0:
|
||||
return 1
|
||||
if isinstance(a, dict) and isinstance(b, dict):
|
||||
if len(a) == 0 and len(b) == 0:
|
||||
return 1
|
||||
if len(a) == 0 or len(b) == 0:
|
||||
return match_rate_zero(key)
|
||||
|
||||
data = [match_rate(a.get(k), b.get(k), key=f"{key}.{k}") for k in a.keys()]
|
||||
|
||||
return sum(data) / len(a)
|
||||
marge_key = set(a.keys()) | set(b.keys())
|
||||
data = [match_rate(a.get(k), b.get(k), base, [*key, k]) for k in marge_key]
|
||||
return sum(data) / len(b)
|
||||
if isinstance(a, list) and isinstance(b, list):
|
||||
if len(a) == 0 and len(b) == 0:
|
||||
return 1
|
||||
if len(a) != len(b):
|
||||
return match_rate_zero(key)
|
||||
data = [match_rate(a[i], b[i], key=f"{key}[{i}]") for i in range(len(a))]
|
||||
return match_rate_zero(a, b, base, key)
|
||||
data = [match_rate(a[i], b[i], base, [*key, i]) for i in range(len(a))]
|
||||
return sum(data) / len(a)
|
||||
if a == b:
|
||||
return 1
|
||||
return match_rate_zero(key)
|
||||
return match_rate_zero(a, b, base, key)
|
||||
|
||||
|
||||
def save_cache(data):
|
||||
|
|
@ -106,12 +125,29 @@ def save_cache(data):
|
|||
json.dump(data, f, indent=4)
|
||||
|
||||
|
||||
def super_get(obj: dict, key: str):
|
||||
keys = [
|
||||
key,
|
||||
"".join(["_" + c.lower() if c.isupper() else c for c in key]).lstrip("_"),
|
||||
]
|
||||
|
||||
for k in keys:
|
||||
if obj.get(k) is not None:
|
||||
return obj[k]
|
||||
raise KeyError(key)
|
||||
|
||||
|
||||
def task_callback(file, thread=True):
|
||||
try:
|
||||
with open(file, "r") as f:
|
||||
cache = json.load(f)
|
||||
data = pt.__dict__[cache["type"]].from_json(cache["raw"])
|
||||
rate = match_rate(data.to_dict(), json.loads(cache["raw"]))
|
||||
|
||||
rate = match_rate(
|
||||
data.to_dict(),
|
||||
json.loads(cache["raw"]),
|
||||
base=data,
|
||||
)
|
||||
return rate, file
|
||||
except Exception:
|
||||
if thread:
|
||||
|
|
@ -149,10 +185,18 @@ if __name__ == "__main__":
|
|||
placeholder = json.load(f)
|
||||
|
||||
fail = []
|
||||
with concurrent.futures.ProcessPoolExecutor() as executor:
|
||||
tasks = [executor.submit(task_callback, x) for x in glob.glob("cache/*.json")]
|
||||
for task in concurrent.futures.as_completed(tasks):
|
||||
rate, file = task.result()
|
||||
files = glob.glob("cache/*.json")
|
||||
if MULTI_THREAD:
|
||||
with concurrent.futures.ProcessPoolExecutor() as executor:
|
||||
tasks = [executor.submit(task_callback, x) for x in files]
|
||||
for task in concurrent.futures.as_completed(tasks):
|
||||
rate, file = task.result()
|
||||
if rate < 1:
|
||||
fail.append(file)
|
||||
logger.info(f"Match rate: {rate}")
|
||||
else:
|
||||
for file in files:
|
||||
rate, file = task_callback(file, thread=False)
|
||||
if rate < 1:
|
||||
fail.append(file)
|
||||
logger.info(f"Match rate: {rate}")
|
||||
|
|
@ -212,7 +256,11 @@ if __name__ == "__main__":
|
|||
new_cursor = set(get_cursor(data, find_cursor)) - cursor_history
|
||||
cursor_list.update(new_cursor)
|
||||
|
||||
rate = match_rate(data, json.loads(res.raw_data))
|
||||
rate = match_rate(
|
||||
data,
|
||||
json.loads(res.raw_data),
|
||||
res.data,
|
||||
)
|
||||
logger.info(f"Match rate: {rate}")
|
||||
|
||||
if data.get("errors") is not None:
|
||||
|
|
@ -233,7 +281,11 @@ if __name__ == "__main__":
|
|||
res = pt.UserApi(api_client).get_user_by_screen_name_with_http_info(**kwargs)
|
||||
data = res.data.to_dict()
|
||||
|
||||
rate = match_rate(data, json.loads(res.raw_data))
|
||||
rate = match_rate(
|
||||
data,
|
||||
json.loads(res.raw_data),
|
||||
res.data,
|
||||
)
|
||||
logger.info(f"Match rate: {rate}")
|
||||
screen_name = data["data"]["user"]["result"]["legacy"]["screen_name"]
|
||||
if not screen_name == "a810810931931":
|
||||
|
|
@ -248,7 +300,11 @@ if __name__ == "__main__":
|
|||
res = pt.TweetApi(api_client).get_user_tweets_with_http_info(**kwargs)
|
||||
data = res.data.to_dict()
|
||||
|
||||
rate = match_rate(data, json.loads(res.raw_data))
|
||||
rate = match_rate(
|
||||
data,
|
||||
json.loads(res.raw_data),
|
||||
res.data,
|
||||
)
|
||||
logger.info(f"Match rate: {rate}")
|
||||
|
||||
except Exception as e:
|
||||
|
|
@ -267,7 +323,11 @@ if __name__ == "__main__":
|
|||
res = pt.TweetApi(api_client).get_tweet_detail_with_http_info(**kwargs)
|
||||
data = res.data.to_dict()
|
||||
|
||||
rate = match_rate(data, json.loads(res.raw_data))
|
||||
rate = match_rate(
|
||||
data,
|
||||
json.loads(res.raw_data),
|
||||
res.data,
|
||||
)
|
||||
logger.info(f"Match rate: {rate}")
|
||||
except Exception as e:
|
||||
error_dump(e)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue