mirror of
https://github.com/thegeneralist01/twitter-openapi
synced 2026-01-10 15:20:26 +01:00
add builder
Signed-off-by: ふぁ <yuki@yuki0311.com>
This commit is contained in:
parent
9052b3a16a
commit
26908878c1
31 changed files with 2886 additions and 1549 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.venv
|
||||
101
dist/openapi-3.0.yaml
vendored
Normal file
101
dist/openapi-3.0.yaml
vendored
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
components:
|
||||
schemas: {}
|
||||
securitySchemes:
|
||||
ActiveUser:
|
||||
description: 'yes'
|
||||
in: header
|
||||
name: x-twitter-active-user
|
||||
type: apiKey
|
||||
AuthType:
|
||||
description: OAuth2Session
|
||||
in: header
|
||||
name: x-twitter-auth-type
|
||||
type: apiKey
|
||||
BearerAuth:
|
||||
description: AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA
|
||||
scheme: bearer
|
||||
type: http
|
||||
ClientLanguage:
|
||||
description: en
|
||||
in: header
|
||||
name: x-twitter-client-language
|
||||
type: apiKey
|
||||
CookieAuthToken:
|
||||
in: cookie
|
||||
name: auth_token
|
||||
type: apiKey
|
||||
CookieCt0:
|
||||
in: cookie
|
||||
name: ct0
|
||||
type: apiKey
|
||||
CsrfToken:
|
||||
in: header
|
||||
name: x-csrf-token
|
||||
type: apiKey
|
||||
info:
|
||||
contact:
|
||||
email: yuki@yuki0311.com
|
||||
description: Twitter OpenAPI(Swagger) specification
|
||||
license:
|
||||
name: GNU Affero General Public License v3.
|
||||
url: https://raw.githubusercontent.com/fa0311/twitter-openapi/main/LICENSE.txt
|
||||
termsOfService: https://github.com/fa0311
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
openapi: 3.0.3
|
||||
paths:
|
||||
/2TemLyqrMpTeAmysdbnVqw/ListLatestTweetsTimeline:
|
||||
$ref: ./path/timeline.yaml#/paths/~12TemLyqrMpTeAmysdbnVqw~1ListLatestTweetsTimeline
|
||||
/5fmEkRT-1AdHqEsbVgehMg/Likes:
|
||||
$ref: ./path/usertweets.yaml#/paths/~15fmEkRT-1AdHqEsbVgehMg~1Likes
|
||||
/HCosKfLNW1AcOo3la3mMgg/HomeTimeline:
|
||||
$ref: ./path/timeline.yaml#/paths/~1HCosKfLNW1AcOo3la3mMgg~1HomeTimeline
|
||||
/HuTx74BxAnezK1gWvYY7zg/UserTweets:
|
||||
$ref: ./path/usertweets.yaml#/paths/~1HuTx74BxAnezK1gWvYY7zg~1UserTweets
|
||||
/RIWc55YCNyUJ-U3HHGYkdg/UserTweetsAndReplies:
|
||||
$ref: ./path/usertweets.yaml#/paths/~1RIWc55YCNyUJ-U3HHGYkdg~1UserTweetsAndReplies
|
||||
/YqiE3JL1KNgf9nSljYdxaA/UserMedia:
|
||||
$ref: ./path/usertweets.yaml#/paths/~1YqiE3JL1KNgf9nSljYdxaA~1UserMedia
|
||||
/sLVLhk0bGj3MVFEKTdax1w/UserByScreenName:
|
||||
$ref: ./path/user.yaml#/paths/~1sLVLhk0bGj3MVFEKTdax1w~1UserByScreenName
|
||||
/zhX91JE87mWvfprhYE97xA/HomeLatestTimeline:
|
||||
$ref: ./path/timeline.yaml#/paths/~1zhX91JE87mWvfprhYE97xA~1HomeLatestTimeline
|
||||
/{{FollowersQuery}}/Followers:
|
||||
$ref: ./path/follow.yaml#/paths/~1{{FollowersQuery}}~1Followers
|
||||
/{{FollowingQuery}}/Following:
|
||||
$ref: ./path/follow.yaml#/paths/~1{{FollowingQuery}}~1Following
|
||||
security:
|
||||
- bearerAuth: []
|
||||
- CsrfToken: []
|
||||
- ActiveUser: []
|
||||
- AuthType: []
|
||||
- ClientLanguage: []
|
||||
- CookieAuthToken: []
|
||||
- CookieCt0: []
|
||||
servers:
|
||||
- url: https://twitter.com/i/api/graphql
|
||||
tags:
|
||||
- description: timeline
|
||||
name: timeline
|
||||
- description: tweet
|
||||
name: tweet
|
||||
- description: user
|
||||
name: user
|
||||
- description: follow
|
||||
name: follow
|
||||
- description: search
|
||||
name: search
|
||||
- description: dm
|
||||
name: dm
|
||||
- description: settings
|
||||
name: settings
|
||||
- description: notify
|
||||
name: notify
|
||||
- description: login session required
|
||||
name: login required
|
||||
- description: graphql
|
||||
name: graphql
|
||||
- description: login flow
|
||||
name: login-flow
|
||||
- description: report flow
|
||||
name: report-flow
|
||||
133
dist/path/follow.yaml
vendored
Normal file
133
dist/path/follow.yaml
vendored
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
openapi: 3.0.3
|
||||
paths:
|
||||
/{{FollowersQuery}}/Followers:
|
||||
get:
|
||||
description: get user list of following
|
||||
operationId: getFollowing
|
||||
parameters:
|
||||
- in: query
|
||||
name: variables
|
||||
required: true
|
||||
schema:
|
||||
example: '{{Variables}}'
|
||||
type: string
|
||||
- in: query
|
||||
name: features
|
||||
required: true
|
||||
schema:
|
||||
example: '{{Features}}'
|
||||
type: string
|
||||
- in: query
|
||||
name: queryId
|
||||
required: true
|
||||
schema:
|
||||
default: '{{Query}}'
|
||||
example: '{{Query}}'
|
||||
type: string
|
||||
responses:
|
||||
'200':
|
||||
description: Successful operation
|
||||
headers:
|
||||
x-connection-hash:
|
||||
schema:
|
||||
type: string
|
||||
x-content-type-options:
|
||||
schema:
|
||||
type: string
|
||||
x-frame-options:
|
||||
schema:
|
||||
type: string
|
||||
x-rate-limit-limit:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-remaining:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-reset:
|
||||
schema:
|
||||
type: integer
|
||||
x-response-time:
|
||||
schema:
|
||||
type: integer
|
||||
x-tfe-preserve-body:
|
||||
schema:
|
||||
type: boolean
|
||||
x-transaction-id:
|
||||
schema:
|
||||
type: string
|
||||
x-twitter-response-tags:
|
||||
schema:
|
||||
type: string
|
||||
x-xss-protection:
|
||||
schema:
|
||||
type: integer
|
||||
tags:
|
||||
- follow
|
||||
- graphql
|
||||
/{{FollowingQuery}}/Following:
|
||||
get:
|
||||
description: get user list of followers
|
||||
operationId: getFollowers
|
||||
parameters:
|
||||
- in: query
|
||||
name: variables
|
||||
required: true
|
||||
schema:
|
||||
example: '{{Variables}}'
|
||||
type: string
|
||||
- in: query
|
||||
name: features
|
||||
required: true
|
||||
schema:
|
||||
example: '{{Features}}'
|
||||
type: string
|
||||
- in: query
|
||||
name: queryId
|
||||
required: true
|
||||
schema:
|
||||
default: '{{Query}}'
|
||||
example: '{{Query}}'
|
||||
type: string
|
||||
responses:
|
||||
'200':
|
||||
description: Successful operation
|
||||
headers:
|
||||
x-connection-hash:
|
||||
schema:
|
||||
type: string
|
||||
x-content-type-options:
|
||||
schema:
|
||||
type: string
|
||||
x-frame-options:
|
||||
schema:
|
||||
type: string
|
||||
x-rate-limit-limit:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-remaining:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-reset:
|
||||
schema:
|
||||
type: integer
|
||||
x-response-time:
|
||||
schema:
|
||||
type: integer
|
||||
x-tfe-preserve-body:
|
||||
schema:
|
||||
type: boolean
|
||||
x-transaction-id:
|
||||
schema:
|
||||
type: string
|
||||
x-twitter-response-tags:
|
||||
schema:
|
||||
type: string
|
||||
x-xss-protection:
|
||||
schema:
|
||||
type: integer
|
||||
tags:
|
||||
- follow
|
||||
- graphql
|
||||
258
dist/path/timeline.yaml
vendored
Normal file
258
dist/path/timeline.yaml
vendored
Normal file
|
|
@ -0,0 +1,258 @@
|
|||
components:
|
||||
schemas:
|
||||
HomeTimelineHome:
|
||||
properties:
|
||||
home_timeline_urt:
|
||||
$ref: ./../schemas/timeline.yaml#/components/schemas/Timeline
|
||||
required:
|
||||
- home_timeline_urt
|
||||
HomeTimelineResponseData:
|
||||
properties:
|
||||
home:
|
||||
$ref: '#/components/schemas/HomeTimelineHome'
|
||||
required:
|
||||
- home
|
||||
ListTweetsTimeline:
|
||||
properties:
|
||||
timeline:
|
||||
$ref: ./../schemas/timeline.yaml#/components/schemas/Timeline
|
||||
required:
|
||||
- timeline
|
||||
ListTweetsTimelineData:
|
||||
properties:
|
||||
home:
|
||||
$ref: '#/components/schemas/ListTweetsTimelineList'
|
||||
required:
|
||||
- list
|
||||
ListTweetsTimelineList:
|
||||
properties:
|
||||
tweets_timeline:
|
||||
$ref: '#/components/schemas/ListTweetsTimeline'
|
||||
required:
|
||||
- tweets_timeline
|
||||
ListTweetsTimelineResponse:
|
||||
properties:
|
||||
data:
|
||||
$ref: '#/components/schemas/ListTweetsTimelineData'
|
||||
required:
|
||||
- data
|
||||
TimelineResponse:
|
||||
properties:
|
||||
data:
|
||||
$ref: '#/components/schemas/HomeTimelineResponseData'
|
||||
required:
|
||||
- data
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
openapi: 3.0.3
|
||||
paths:
|
||||
/2TemLyqrMpTeAmysdbnVqw/ListLatestTweetsTimeline:
|
||||
get:
|
||||
description: get tweet list of timeline
|
||||
operationId: getListLatestTweetsTimeline
|
||||
parameters:
|
||||
- in: query
|
||||
name: variables
|
||||
required: true
|
||||
schema:
|
||||
example: '{"listId": "53044119", "count": 20}'
|
||||
type: string
|
||||
- in: query
|
||||
name: features
|
||||
required: true
|
||||
schema:
|
||||
example: '{{Features}}'
|
||||
type: string
|
||||
- in: query
|
||||
name: queryId
|
||||
required: true
|
||||
schema:
|
||||
default: 2TemLyqrMpTeAmysdbnVqw
|
||||
example: 2TemLyqrMpTeAmysdbnVqw
|
||||
type: string
|
||||
responses:
|
||||
'200':
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ListTweetsTimelineResponse'
|
||||
description: Successful operation
|
||||
headers:
|
||||
x-connection-hash:
|
||||
schema:
|
||||
type: string
|
||||
x-content-type-options:
|
||||
schema:
|
||||
type: string
|
||||
x-frame-options:
|
||||
schema:
|
||||
type: string
|
||||
x-rate-limit-limit:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-remaining:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-reset:
|
||||
schema:
|
||||
type: integer
|
||||
x-response-time:
|
||||
schema:
|
||||
type: integer
|
||||
x-tfe-preserve-body:
|
||||
schema:
|
||||
type: boolean
|
||||
x-transaction-id:
|
||||
schema:
|
||||
type: string
|
||||
x-twitter-response-tags:
|
||||
schema:
|
||||
type: string
|
||||
x-xss-protection:
|
||||
schema:
|
||||
type: integer
|
||||
tags:
|
||||
- timeline
|
||||
- login-required
|
||||
- graphql
|
||||
/HCosKfLNW1AcOo3la3mMgg/HomeTimeline:
|
||||
get:
|
||||
description: get tweet list of timeline
|
||||
operationId: getHomeTimeline
|
||||
parameters:
|
||||
- in: query
|
||||
name: variables
|
||||
required: true
|
||||
schema:
|
||||
example: '{"count": 40, "includePromotedContent": true, "latestControlAvailable":
|
||||
true, "withCommunity": true}'
|
||||
type: string
|
||||
- in: query
|
||||
name: features
|
||||
required: true
|
||||
schema:
|
||||
example: '{{Features}}'
|
||||
type: string
|
||||
- in: query
|
||||
name: queryId
|
||||
required: true
|
||||
schema:
|
||||
default: HCosKfLNW1AcOo3la3mMgg
|
||||
example: HCosKfLNW1AcOo3la3mMgg
|
||||
type: string
|
||||
responses:
|
||||
'200':
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/TimelineResponse'
|
||||
description: Successful operation
|
||||
headers:
|
||||
x-connection-hash:
|
||||
schema:
|
||||
type: string
|
||||
x-content-type-options:
|
||||
schema:
|
||||
type: string
|
||||
x-frame-options:
|
||||
schema:
|
||||
type: string
|
||||
x-rate-limit-limit:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-remaining:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-reset:
|
||||
schema:
|
||||
type: integer
|
||||
x-response-time:
|
||||
schema:
|
||||
type: integer
|
||||
x-tfe-preserve-body:
|
||||
schema:
|
||||
type: boolean
|
||||
x-transaction-id:
|
||||
schema:
|
||||
type: string
|
||||
x-twitter-response-tags:
|
||||
schema:
|
||||
type: string
|
||||
x-xss-protection:
|
||||
schema:
|
||||
type: integer
|
||||
tags:
|
||||
- timeline
|
||||
- login-required
|
||||
- graphql
|
||||
/zhX91JE87mWvfprhYE97xA/HomeLatestTimeline:
|
||||
get:
|
||||
description: get tweet list of timeline
|
||||
operationId: getHomeLatestTimeline
|
||||
parameters:
|
||||
- in: query
|
||||
name: variables
|
||||
required: true
|
||||
schema:
|
||||
example: '{"count": 20, "includePromotedContent": true, "latestControlAvailable":
|
||||
true, "requestContext": "launch"}'
|
||||
type: string
|
||||
- in: query
|
||||
name: features
|
||||
required: true
|
||||
schema:
|
||||
example: '{{Features}}'
|
||||
type: string
|
||||
- in: query
|
||||
name: queryId
|
||||
required: true
|
||||
schema:
|
||||
default: zhX91JE87mWvfprhYE97xA
|
||||
example: zhX91JE87mWvfprhYE97xA
|
||||
type: string
|
||||
responses:
|
||||
'200':
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/TimelineResponse'
|
||||
description: Successful operation
|
||||
headers:
|
||||
x-connection-hash:
|
||||
schema:
|
||||
type: string
|
||||
x-content-type-options:
|
||||
schema:
|
||||
type: string
|
||||
x-frame-options:
|
||||
schema:
|
||||
type: string
|
||||
x-rate-limit-limit:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-remaining:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-reset:
|
||||
schema:
|
||||
type: integer
|
||||
x-response-time:
|
||||
schema:
|
||||
type: integer
|
||||
x-tfe-preserve-body:
|
||||
schema:
|
||||
type: boolean
|
||||
x-transaction-id:
|
||||
schema:
|
||||
type: string
|
||||
x-twitter-response-tags:
|
||||
schema:
|
||||
type: string
|
||||
x-xss-protection:
|
||||
schema:
|
||||
type: integer
|
||||
tags:
|
||||
- timeline
|
||||
- login-required
|
||||
- graphql
|
||||
89
dist/path/user.yaml
vendored
Normal file
89
dist/path/user.yaml
vendored
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
components:
|
||||
schemas:
|
||||
UserResponse:
|
||||
properties:
|
||||
data:
|
||||
$ref: '#/components/schemas/UserResponseData'
|
||||
required:
|
||||
- data
|
||||
UserResponseData:
|
||||
properties:
|
||||
user:
|
||||
$ref: ./../schemas/user.yaml#/components/schemas/UserResults
|
||||
required:
|
||||
- user
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
openapi: 3.0.3
|
||||
paths:
|
||||
/sLVLhk0bGj3MVFEKTdax1w/UserByScreenName:
|
||||
get:
|
||||
description: get user by screen name
|
||||
operationId: getUserByScreenName
|
||||
parameters:
|
||||
- in: query
|
||||
name: variables
|
||||
required: true
|
||||
schema:
|
||||
example: '{"screen_name": "elonmusk", "withSafetyModeUserFields": true}'
|
||||
type: string
|
||||
- in: query
|
||||
name: features
|
||||
required: true
|
||||
schema:
|
||||
example: '{"blue_business_profile_image_shape_enabled": true, "responsive_web_graphql_exclude_directive_enabled":
|
||||
true, "verified_phone_label_enabled": false, "responsive_web_graphql_skip_user_profile_image_extensions_enabled":
|
||||
false, "responsive_web_graphql_timeline_navigation_enabled": true}'
|
||||
type: string
|
||||
- in: query
|
||||
name: queryId
|
||||
required: true
|
||||
schema:
|
||||
default: sLVLhk0bGj3MVFEKTdax1w
|
||||
example: sLVLhk0bGj3MVFEKTdax1w
|
||||
type: string
|
||||
responses:
|
||||
'200':
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/UserResponse'
|
||||
description: Successful operation
|
||||
headers:
|
||||
x-connection-hash:
|
||||
schema:
|
||||
type: string
|
||||
x-content-type-options:
|
||||
schema:
|
||||
type: string
|
||||
x-frame-options:
|
||||
schema:
|
||||
type: string
|
||||
x-rate-limit-limit:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-remaining:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-reset:
|
||||
schema:
|
||||
type: integer
|
||||
x-response-time:
|
||||
schema:
|
||||
type: integer
|
||||
x-tfe-preserve-body:
|
||||
schema:
|
||||
type: boolean
|
||||
x-transaction-id:
|
||||
schema:
|
||||
type: string
|
||||
x-twitter-response-tags:
|
||||
schema:
|
||||
type: string
|
||||
x-xss-protection:
|
||||
schema:
|
||||
type: integer
|
||||
tags:
|
||||
- user
|
||||
- graphql
|
||||
353
dist/path/usertweets.yaml
vendored
Normal file
353
dist/path/usertweets.yaml
vendored
Normal file
|
|
@ -0,0 +1,353 @@
|
|||
components:
|
||||
schemas:
|
||||
UserTweetsData:
|
||||
properties:
|
||||
user:
|
||||
$ref: '#/components/schemas/UserTweetsUser'
|
||||
required:
|
||||
- user
|
||||
UserTweetsResponse:
|
||||
properties:
|
||||
data:
|
||||
$ref: '#/components/schemas/UserTweetsData'
|
||||
required:
|
||||
- data
|
||||
UserTweetsResult:
|
||||
properties:
|
||||
__typename:
|
||||
$ref: ./../schemas/typename.yaml#/components/schemas/TypeName
|
||||
timeline_v2:
|
||||
$ref: ./../schemas/timeline.yaml#/components/schemas/TimelineV2
|
||||
required:
|
||||
- __typename
|
||||
- timeline_v2
|
||||
UserTweetsUser:
|
||||
properties:
|
||||
result:
|
||||
$ref: '#/components/schemas/UserTweetsResult'
|
||||
required:
|
||||
- result
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
openapi: 3.0.3
|
||||
paths:
|
||||
/5fmEkRT-1AdHqEsbVgehMg/Likes:
|
||||
get:
|
||||
description: get user likes tweets
|
||||
operationId: getLikes
|
||||
parameters:
|
||||
- in: query
|
||||
name: variables
|
||||
required: true
|
||||
schema:
|
||||
example: '{"userId": "44196397", "count": 20, "includePromotedContent":
|
||||
false, "withClientEventToken": false, "withBirdwatchNotes": false, "withVoice":
|
||||
true, "withV2Timeline": true}'
|
||||
type: string
|
||||
- in: query
|
||||
name: features
|
||||
required: true
|
||||
schema:
|
||||
example: '{"blue_business_profile_image_shape_enabled": true, "responsive_web_graphql_exclude_directive_enabled":
|
||||
true, "verified_phone_label_enabled": false, "responsive_web_graphql_timeline_navigation_enabled":
|
||||
true, "responsive_web_graphql_skip_user_profile_image_extensions_enabled":
|
||||
false, "tweetypie_unmention_optimization_enabled": true, "vibe_api_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, "tweet_awards_web_tipping_enabled": false, "freedom_of_speech_not_reach_fetch_enabled":
|
||||
false, "standardized_nudges_misinfo": true, "tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled":
|
||||
false, "interactive_text_enabled": true, "responsive_web_text_conversations_enabled":
|
||||
false, "longform_notetweets_rich_text_read_enabled": true, "responsive_web_enhance_cards_enabled":
|
||||
false}'
|
||||
type: string
|
||||
- in: query
|
||||
name: queryId
|
||||
required: true
|
||||
schema:
|
||||
default: 5fmEkRT-1AdHqEsbVgehMg
|
||||
example: 5fmEkRT-1AdHqEsbVgehMg
|
||||
type: string
|
||||
responses:
|
||||
'200':
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/UserTweetsResponse'
|
||||
description: Successful operation
|
||||
headers:
|
||||
x-connection-hash:
|
||||
schema:
|
||||
type: string
|
||||
x-content-type-options:
|
||||
schema:
|
||||
type: string
|
||||
x-frame-options:
|
||||
schema:
|
||||
type: string
|
||||
x-rate-limit-limit:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-remaining:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-reset:
|
||||
schema:
|
||||
type: integer
|
||||
x-response-time:
|
||||
schema:
|
||||
type: integer
|
||||
x-tfe-preserve-body:
|
||||
schema:
|
||||
type: boolean
|
||||
x-transaction-id:
|
||||
schema:
|
||||
type: string
|
||||
x-twitter-response-tags:
|
||||
schema:
|
||||
type: string
|
||||
x-xss-protection:
|
||||
schema:
|
||||
type: integer
|
||||
tags:
|
||||
- user
|
||||
- graphql
|
||||
/HuTx74BxAnezK1gWvYY7zg/UserTweets:
|
||||
get:
|
||||
description: get user tweets
|
||||
operationId: getUserTweets
|
||||
parameters:
|
||||
- in: query
|
||||
name: variables
|
||||
required: true
|
||||
schema:
|
||||
example: '{"userId": "44196397", "count": 40, "includePromotedContent":
|
||||
true, "withQuickPromoteEligibilityTweetFields": true, "withVoice": true,
|
||||
"withV2Timeline": true}'
|
||||
type: string
|
||||
- in: query
|
||||
name: features
|
||||
required: true
|
||||
schema:
|
||||
example: '{"blue_business_profile_image_shape_enabled": true, "responsive_web_graphql_exclude_directive_enabled":
|
||||
true, "verified_phone_label_enabled": false, "responsive_web_graphql_timeline_navigation_enabled":
|
||||
true, "responsive_web_graphql_skip_user_profile_image_extensions_enabled":
|
||||
false, "tweetypie_unmention_optimization_enabled": true, "vibe_api_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, "tweet_awards_web_tipping_enabled": false, "freedom_of_speech_not_reach_fetch_enabled":
|
||||
false, "standardized_nudges_misinfo": true, "tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled":
|
||||
false, "interactive_text_enabled": true, "responsive_web_text_conversations_enabled":
|
||||
false, "longform_notetweets_rich_text_read_enabled": true, "responsive_web_enhance_cards_enabled":
|
||||
false}'
|
||||
type: string
|
||||
- in: query
|
||||
name: queryId
|
||||
required: true
|
||||
schema:
|
||||
default: HuTx74BxAnezK1gWvYY7zg
|
||||
example: HuTx74BxAnezK1gWvYY7zg
|
||||
type: string
|
||||
responses:
|
||||
'200':
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/UserTweetsResponse'
|
||||
description: Successful operation
|
||||
headers:
|
||||
x-connection-hash:
|
||||
schema:
|
||||
type: string
|
||||
x-content-type-options:
|
||||
schema:
|
||||
type: string
|
||||
x-frame-options:
|
||||
schema:
|
||||
type: string
|
||||
x-rate-limit-limit:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-remaining:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-reset:
|
||||
schema:
|
||||
type: integer
|
||||
x-response-time:
|
||||
schema:
|
||||
type: integer
|
||||
x-tfe-preserve-body:
|
||||
schema:
|
||||
type: boolean
|
||||
x-transaction-id:
|
||||
schema:
|
||||
type: string
|
||||
x-twitter-response-tags:
|
||||
schema:
|
||||
type: string
|
||||
x-xss-protection:
|
||||
schema:
|
||||
type: integer
|
||||
tags:
|
||||
- user
|
||||
- graphql
|
||||
/RIWc55YCNyUJ-U3HHGYkdg/UserTweetsAndReplies:
|
||||
get:
|
||||
description: get user replies tweets
|
||||
operationId: getUserTweetsAndReplies
|
||||
parameters:
|
||||
- in: query
|
||||
name: variables
|
||||
required: true
|
||||
schema:
|
||||
example: '{"userId": "44196397", "count": 40, "includePromotedContent":
|
||||
true, "withCommunity": true, "withVoice": true, "withV2Timeline": true}'
|
||||
type: string
|
||||
- in: query
|
||||
name: features
|
||||
required: true
|
||||
schema:
|
||||
example: '{"blue_business_profile_image_shape_enabled": true, "responsive_web_graphql_exclude_directive_enabled":
|
||||
true, "verified_phone_label_enabled": false, "responsive_web_graphql_timeline_navigation_enabled":
|
||||
true, "responsive_web_graphql_skip_user_profile_image_extensions_enabled":
|
||||
false, "tweetypie_unmention_optimization_enabled": true, "vibe_api_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, "tweet_awards_web_tipping_enabled": false, "freedom_of_speech_not_reach_fetch_enabled":
|
||||
false, "standardized_nudges_misinfo": true, "tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled":
|
||||
false, "interactive_text_enabled": true, "responsive_web_text_conversations_enabled":
|
||||
false, "longform_notetweets_rich_text_read_enabled": true, "responsive_web_enhance_cards_enabled":
|
||||
false}'
|
||||
type: string
|
||||
- in: query
|
||||
name: queryId
|
||||
required: true
|
||||
schema:
|
||||
default: RIWc55YCNyUJ-U3HHGYkdg
|
||||
example: RIWc55YCNyUJ-U3HHGYkdg
|
||||
type: string
|
||||
responses:
|
||||
'200':
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/UserTweetsResponse'
|
||||
description: Successful operation
|
||||
headers:
|
||||
x-connection-hash:
|
||||
schema:
|
||||
type: string
|
||||
x-content-type-options:
|
||||
schema:
|
||||
type: string
|
||||
x-frame-options:
|
||||
schema:
|
||||
type: string
|
||||
x-rate-limit-limit:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-remaining:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-reset:
|
||||
schema:
|
||||
type: integer
|
||||
x-response-time:
|
||||
schema:
|
||||
type: integer
|
||||
x-tfe-preserve-body:
|
||||
schema:
|
||||
type: boolean
|
||||
x-transaction-id:
|
||||
schema:
|
||||
type: string
|
||||
x-twitter-response-tags:
|
||||
schema:
|
||||
type: string
|
||||
x-xss-protection:
|
||||
schema:
|
||||
type: integer
|
||||
tags:
|
||||
- user
|
||||
- graphql
|
||||
/YqiE3JL1KNgf9nSljYdxaA/UserMedia:
|
||||
get:
|
||||
description: get user media tweets
|
||||
operationId: getUserMedia
|
||||
parameters:
|
||||
- in: query
|
||||
name: variables
|
||||
required: true
|
||||
schema:
|
||||
example: '{"userId": "44196397", "count": 20, "includePromotedContent":
|
||||
false, "withClientEventToken": false, "withBirdwatchNotes": false, "withVoice":
|
||||
true, "withV2Timeline": true}'
|
||||
type: string
|
||||
- in: query
|
||||
name: features
|
||||
required: true
|
||||
schema:
|
||||
example: '{"blue_business_profile_image_shape_enabled": true, "responsive_web_graphql_exclude_directive_enabled":
|
||||
true, "verified_phone_label_enabled": false, "responsive_web_graphql_timeline_navigation_enabled":
|
||||
true, "responsive_web_graphql_skip_user_profile_image_extensions_enabled":
|
||||
false, "tweetypie_unmention_optimization_enabled": true, "vibe_api_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, "tweet_awards_web_tipping_enabled": false, "freedom_of_speech_not_reach_fetch_enabled":
|
||||
false, "standardized_nudges_misinfo": true, "tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled":
|
||||
false, "interactive_text_enabled": true, "responsive_web_text_conversations_enabled":
|
||||
false, "longform_notetweets_rich_text_read_enabled": true, "responsive_web_enhance_cards_enabled":
|
||||
false}'
|
||||
type: string
|
||||
- in: query
|
||||
name: queryId
|
||||
required: true
|
||||
schema:
|
||||
default: YqiE3JL1KNgf9nSljYdxaA
|
||||
example: YqiE3JL1KNgf9nSljYdxaA
|
||||
type: string
|
||||
responses:
|
||||
'200':
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/UserTweetsResponse'
|
||||
description: Successful operation
|
||||
headers:
|
||||
x-connection-hash:
|
||||
schema:
|
||||
type: string
|
||||
x-content-type-options:
|
||||
schema:
|
||||
type: string
|
||||
x-frame-options:
|
||||
schema:
|
||||
type: string
|
||||
x-rate-limit-limit:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-remaining:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-reset:
|
||||
schema:
|
||||
type: integer
|
||||
x-response-time:
|
||||
schema:
|
||||
type: integer
|
||||
x-tfe-preserve-body:
|
||||
schema:
|
||||
type: boolean
|
||||
x-transaction-id:
|
||||
schema:
|
||||
type: string
|
||||
x-twitter-response-tags:
|
||||
schema:
|
||||
type: string
|
||||
x-xss-protection:
|
||||
schema:
|
||||
type: integer
|
||||
tags:
|
||||
- user
|
||||
- graphql
|
||||
105
dist/schemas/content.yaml
vendored
Normal file
105
dist/schemas/content.yaml
vendored
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
components:
|
||||
schemas:
|
||||
ContentEntryType:
|
||||
enum:
|
||||
- TimelineTimelineItem
|
||||
- TimelineTimelineCursor
|
||||
- TimelineTimelineModule
|
||||
type: string
|
||||
ContentItemType:
|
||||
enum:
|
||||
- TimelineTweet
|
||||
type: string
|
||||
ContentUnion:
|
||||
discriminator:
|
||||
mapping":
|
||||
TimelineTimelineCursor: '#/components/schemas/TimelineTimelineCursor'
|
||||
TimelineTimelineItem: '#/components/schemas/TimelineTimelineItem'
|
||||
TimelineTimelineModule: '#/components/schemas/TimelineTimelineModule'
|
||||
propertyName: entryType
|
||||
oneOf:
|
||||
- $ref: '#/components/schemas/TimelineTimelineItem'
|
||||
- $ref: '#/components/schemas/TimelineTimelineCursor'
|
||||
- $ref: '#/components/schemas/TimelineTimelineModule'
|
||||
ItemContent:
|
||||
properties:
|
||||
__typename:
|
||||
$ref: ./typename.yaml#/components/schemas/TypeName
|
||||
itemType:
|
||||
$ref: '#/components/schemas/ContentItemType'
|
||||
type: string
|
||||
socialContext:
|
||||
properties:
|
||||
contextType:
|
||||
type: string
|
||||
text:
|
||||
type: string
|
||||
type:
|
||||
type: string
|
||||
type: object
|
||||
tweetDisplayType:
|
||||
type: string
|
||||
tweet_results:
|
||||
$ref: '#/components/schemas/ItemResult'
|
||||
required:
|
||||
- __typename
|
||||
- itemType
|
||||
- tweetDisplayType
|
||||
- tweet_results
|
||||
ItemResult:
|
||||
properties:
|
||||
result:
|
||||
$ref: ./tweet.yaml#/components/schemas/TweetUnion
|
||||
required:
|
||||
- result
|
||||
TimelineTimelineCursor:
|
||||
properties:
|
||||
__typename:
|
||||
$ref: ./typename.yaml#/components/schemas/TypeName
|
||||
cursorType:
|
||||
enum:
|
||||
- Top
|
||||
- Bottom
|
||||
type: string
|
||||
entryType:
|
||||
$ref: '#/components/schemas/ContentEntryType'
|
||||
type: string
|
||||
value:
|
||||
type: string
|
||||
required:
|
||||
- __typename
|
||||
- entryType
|
||||
- cursorType
|
||||
- value
|
||||
TimelineTimelineItem:
|
||||
properties:
|
||||
__typename:
|
||||
$ref: ./typename.yaml#/components/schemas/TypeName
|
||||
clientEventInfo:
|
||||
type: object
|
||||
entryType:
|
||||
$ref: '#/components/schemas/ContentEntryType'
|
||||
type: string
|
||||
feedbackInfo:
|
||||
type: object
|
||||
itemContent:
|
||||
$ref: '#/components/schemas/ItemContent'
|
||||
required:
|
||||
- __typename
|
||||
- entryType
|
||||
- itemContent
|
||||
TimelineTimelineModule:
|
||||
properties:
|
||||
__typename:
|
||||
$ref: ./typename.yaml#/components/schemas/TypeName
|
||||
entryType:
|
||||
$ref: '#/components/schemas/ContentEntryType'
|
||||
type: string
|
||||
required:
|
||||
- __typename
|
||||
- entryType
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
openapi: 3.0.3
|
||||
paths: {}
|
||||
13
dist/schemas/general.yaml
vendored
Normal file
13
dist/schemas/general.yaml
vendored
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
components:
|
||||
schemas:
|
||||
TwitterTimeFormat:
|
||||
example: Sat Dec 31 23:59:59 +0000 2023
|
||||
pattern: ^(Sun|Mon|Tue|Wed|Thu|Fri|Sat) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
|
||||
(0[1-9]|[12][0-9]|3[01]) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])
|
||||
([+-][0-9]{4}) ([0-9]{4})$
|
||||
type: string
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
openapi: 3.0.3
|
||||
paths: {}
|
||||
67
dist/schemas/instruction.yaml
vendored
Normal file
67
dist/schemas/instruction.yaml
vendored
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
components:
|
||||
schemas:
|
||||
InstructionType:
|
||||
enum:
|
||||
- TimelineAddEntries
|
||||
- TimelineClearCache
|
||||
- TimelinePinEntry
|
||||
type: string
|
||||
InstructionUnion:
|
||||
discriminator:
|
||||
mapping":
|
||||
TimelineAddEntries: '#/components/schemas/TimelineAddEntries'
|
||||
TimelineClearCache: '#/components/schemas/TimelineClearCache'
|
||||
TimelinePinEntry: '#/components/schemas/TimelinePinEntry'
|
||||
propertyName: type
|
||||
oneOf:
|
||||
- $ref: '#/components/schemas/TimelineAddEntries'
|
||||
- $ref: '#/components/schemas/TimelineClearCache'
|
||||
- $ref: '#/components/schemas/TimelinePinEntry'
|
||||
TimelineAddEntries:
|
||||
properties:
|
||||
entries:
|
||||
items:
|
||||
$ref: '#/components/schemas/TimelineAddEntry'
|
||||
type: array
|
||||
type:
|
||||
$ref: '#/components/schemas/InstructionType'
|
||||
type: string
|
||||
required:
|
||||
- type
|
||||
- entries
|
||||
TimelineAddEntry:
|
||||
properties:
|
||||
content:
|
||||
$ref: ./content.yaml#/components/schemas/ContentUnion
|
||||
entryId:
|
||||
pattern: ^[a-z\-]+[0-9]+$
|
||||
type: string
|
||||
sortIndex:
|
||||
pattern: '[0-9]+$'
|
||||
type: string
|
||||
required:
|
||||
- content
|
||||
- entryId
|
||||
- sortIndex
|
||||
TimelineClearCache:
|
||||
properties:
|
||||
type:
|
||||
$ref: '#/components/schemas/InstructionType'
|
||||
type: string
|
||||
required:
|
||||
- type
|
||||
TimelinePinEntry:
|
||||
properties:
|
||||
entry:
|
||||
$ref: '#/components/schemas/TimelineAddEntry'
|
||||
type:
|
||||
$ref: '#/components/schemas/InstructionType'
|
||||
type: string
|
||||
required:
|
||||
- type
|
||||
- entry
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
openapi: 3.0.3
|
||||
paths: {}
|
||||
25
dist/schemas/timeline.yaml
vendored
Normal file
25
dist/schemas/timeline.yaml
vendored
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
components:
|
||||
schemas:
|
||||
Timeline:
|
||||
properties:
|
||||
instructions:
|
||||
items:
|
||||
$ref: ./../schemas/instruction.yaml#/components/schemas/InstructionUnion
|
||||
type: array
|
||||
metadata:
|
||||
type: object
|
||||
responseObjects:
|
||||
type: object
|
||||
required:
|
||||
- instructions
|
||||
TimelineV2:
|
||||
properties:
|
||||
timeline:
|
||||
$ref: '#/components/schemas/Timeline'
|
||||
required:
|
||||
- timeline
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
openapi: 3.0.3
|
||||
paths: {}
|
||||
145
dist/schemas/tweet.yaml
vendored
Normal file
145
dist/schemas/tweet.yaml
vendored
Normal file
|
|
@ -0,0 +1,145 @@
|
|||
components:
|
||||
schemas:
|
||||
Tweet:
|
||||
properties:
|
||||
__typename:
|
||||
$ref: ./typename.yaml#/components/schemas/TypeName
|
||||
core:
|
||||
$ref: ./user.yaml#/components/schemas/UserResultCore
|
||||
edit_control:
|
||||
properties:
|
||||
edit_tweet_ids:
|
||||
items:
|
||||
pattern: ^[0-9]+$
|
||||
type: string
|
||||
type: array
|
||||
editable_until_msecs:
|
||||
pattern: ^[0-9]+$
|
||||
type: string
|
||||
edits_remaining:
|
||||
pattern: ^[0-9]+$
|
||||
type: string
|
||||
is_edit_eligible:
|
||||
type: boolean
|
||||
type: object
|
||||
edit_prespective:
|
||||
properties:
|
||||
favorited:
|
||||
type: boolean
|
||||
retweeted:
|
||||
type: boolean
|
||||
type: object
|
||||
is_translatable:
|
||||
default: false
|
||||
type: boolean
|
||||
legacy:
|
||||
$ref: '#/components/schemas/TweetLegacy'
|
||||
rest_id:
|
||||
pattern: ^[0-9]+$
|
||||
type: string
|
||||
unmention_data:
|
||||
type: object
|
||||
views:
|
||||
properties:
|
||||
count:
|
||||
pattern: ^[0-9]+$
|
||||
type: string
|
||||
state:
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- rest_id
|
||||
- core
|
||||
- edit_control
|
||||
- edit_prespective
|
||||
- is_translatable
|
||||
- legacy
|
||||
- views
|
||||
TweetLegacy:
|
||||
properties:
|
||||
bookmark_count:
|
||||
type: integer
|
||||
bookmarked:
|
||||
type: boolean
|
||||
conversation_id_str:
|
||||
pattern: ^[0-9]+$
|
||||
type: string
|
||||
created_at:
|
||||
$ref: ./general.yaml#/components/schemas/TwitterTimeFormat
|
||||
display_text_range:
|
||||
items:
|
||||
type: integer
|
||||
type: array
|
||||
entities:
|
||||
type: object
|
||||
favorite_count:
|
||||
type: integer
|
||||
favorited:
|
||||
type: boolean
|
||||
full_text:
|
||||
type: string
|
||||
id_str:
|
||||
pattern: ^[0-9]+$
|
||||
type: string
|
||||
is_quote_status:
|
||||
type: boolean
|
||||
lang:
|
||||
type: string
|
||||
possibly_sensitive:
|
||||
default: false
|
||||
type: boolean
|
||||
possibly_sensitive_editable:
|
||||
default: false
|
||||
type: boolean
|
||||
quote_count:
|
||||
type: integer
|
||||
reply_count:
|
||||
type: integer
|
||||
retweet_count:
|
||||
type: integer
|
||||
retweeted:
|
||||
type: boolean
|
||||
user_id_str:
|
||||
pattern: ^[0-9]+$
|
||||
type: string
|
||||
required:
|
||||
- bookmark_count
|
||||
- bookmarked
|
||||
- conversation_id_str
|
||||
- created_at
|
||||
- display_text_range
|
||||
- entities
|
||||
- favorite_count
|
||||
- favorited
|
||||
- full_text
|
||||
- is_quote_status
|
||||
- lang
|
||||
- quote_count
|
||||
- reply_count
|
||||
- retweet_count
|
||||
- retweeted
|
||||
- user_id_str
|
||||
- id_str
|
||||
TweetUnion:
|
||||
discriminator:
|
||||
mapping":
|
||||
Tweet: '#/components/schemas/Tweet'
|
||||
TweetWithVisibilityResults: '#/components/schemas/TweetWithVisibilityResults'
|
||||
propertyName: __typename
|
||||
oneOf:
|
||||
- $ref: '#/components/schemas/Tweet'
|
||||
- $ref: '#/components/schemas/TweetWithVisibilityResults'
|
||||
TweetWithVisibilityResults:
|
||||
properties:
|
||||
__typename:
|
||||
$ref: ./typename.yaml#/components/schemas/TypeName
|
||||
tweet:
|
||||
$ref: '#/components/schemas/Tweet'
|
||||
required:
|
||||
- __typename
|
||||
- tweet
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
openapi: 3.0.3
|
||||
paths: {}
|
||||
17
dist/schemas/typename.yaml
vendored
Normal file
17
dist/schemas/typename.yaml
vendored
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
components:
|
||||
schemas:
|
||||
TypeName:
|
||||
enum:
|
||||
- TimelineTweet
|
||||
- TimelineTimelineItem
|
||||
- TimelineTimelineCursor
|
||||
- TweetWithVisibilityResults
|
||||
- TimelineTimelineModule
|
||||
- Tweet
|
||||
- User
|
||||
type: string
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
openapi: 3.0.3
|
||||
paths: {}
|
||||
214
dist/schemas/user.yaml
vendored
Normal file
214
dist/schemas/user.yaml
vendored
Normal file
|
|
@ -0,0 +1,214 @@
|
|||
components:
|
||||
schemas:
|
||||
User:
|
||||
properties:
|
||||
__typename:
|
||||
$ref: ./typename.yaml#/components/schemas/TypeName
|
||||
affiliates_highlighted_label:
|
||||
type: object
|
||||
business_account:
|
||||
type: object
|
||||
has_graduated_access:
|
||||
type: boolean
|
||||
has_nft_avatar:
|
||||
default: false
|
||||
type: boolean
|
||||
id:
|
||||
pattern: ^[a-z\-]+[0-9]+$
|
||||
type: string
|
||||
is_blue_verified:
|
||||
default: false
|
||||
type: boolean
|
||||
legacy:
|
||||
$ref: '#/components/schemas/UserLegacy'
|
||||
rest_id:
|
||||
pattern: ^[0-9]+$
|
||||
type: string
|
||||
super_follow_eligible:
|
||||
default: false
|
||||
type: boolean
|
||||
super_followed_by:
|
||||
default: false
|
||||
type: boolean
|
||||
super_following:
|
||||
default: false
|
||||
type: boolean
|
||||
required:
|
||||
- __typename
|
||||
- affiliates_highlighted_label
|
||||
- has_graduated_access
|
||||
- id
|
||||
- is_blue_verified
|
||||
- legacy
|
||||
- rest_id
|
||||
- super_follow_eligible
|
||||
- super_followed_by
|
||||
- super_following
|
||||
UserLegacy:
|
||||
properties:
|
||||
blocked_by:
|
||||
default: false
|
||||
type: boolean
|
||||
blocking:
|
||||
default: false
|
||||
type: boolean
|
||||
can_dm:
|
||||
default: false
|
||||
type: boolean
|
||||
can_media_tag:
|
||||
default: false
|
||||
type: boolean
|
||||
created_at:
|
||||
$ref: ./general.yaml#/components/schemas/TwitterTimeFormat
|
||||
default_profile:
|
||||
default: false
|
||||
type: boolean
|
||||
default_profile_image:
|
||||
default: false
|
||||
type: boolean
|
||||
description:
|
||||
type: string
|
||||
entities:
|
||||
type: object
|
||||
fast_followers_count:
|
||||
type: integer
|
||||
favourites_count:
|
||||
default: 0
|
||||
type: integer
|
||||
follow_request_sent:
|
||||
default: false
|
||||
type: boolean
|
||||
followed_by:
|
||||
default: false
|
||||
type: boolean
|
||||
followers_count:
|
||||
default: 0
|
||||
type: integer
|
||||
following:
|
||||
default: false
|
||||
type: boolean
|
||||
friends_count:
|
||||
default: 0
|
||||
type: integer
|
||||
has_custom_timelines:
|
||||
default: false
|
||||
type: boolean
|
||||
is_translator:
|
||||
default: false
|
||||
type: boolean
|
||||
listed_count:
|
||||
default: 0
|
||||
type: integer
|
||||
location:
|
||||
type: string
|
||||
media_count:
|
||||
default: 0
|
||||
type: integer
|
||||
muting:
|
||||
default: false
|
||||
type: boolean
|
||||
name:
|
||||
type: string
|
||||
normal_followers_count:
|
||||
default: 0
|
||||
type: integer
|
||||
notifications:
|
||||
default: false
|
||||
type: boolean
|
||||
pinned_tweet_ids_str:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
possibly_sensitive:
|
||||
default: false
|
||||
type: boolean
|
||||
profile_banner_extensions:
|
||||
type: object
|
||||
profile_banner_url:
|
||||
format: uri
|
||||
type: string
|
||||
profile_image_extensions:
|
||||
type: object
|
||||
profile_image_url_https:
|
||||
format: uri
|
||||
type: string
|
||||
profile_interstitial_type:
|
||||
type: string
|
||||
protected:
|
||||
default: false
|
||||
type: boolean
|
||||
screen_name:
|
||||
type: string
|
||||
statuses_count:
|
||||
default: 0
|
||||
type: integer
|
||||
translator_type:
|
||||
type: string
|
||||
url:
|
||||
type: string
|
||||
verified:
|
||||
type: boolean
|
||||
want_retweets:
|
||||
default: false
|
||||
type: boolean
|
||||
required:
|
||||
- blocked_by
|
||||
- blocking
|
||||
- can_dm
|
||||
- can_media_tag
|
||||
- created_at
|
||||
- default_profile
|
||||
- default_profile_image
|
||||
- description
|
||||
- entities
|
||||
- fast_followers_count
|
||||
- favourites_count
|
||||
- follow_request_sent
|
||||
- followed_by
|
||||
- followers_count
|
||||
- following
|
||||
- friends_count
|
||||
- has_custom_timelines
|
||||
- is_translator
|
||||
- listed_count
|
||||
- location
|
||||
- media_count
|
||||
- muting
|
||||
- name
|
||||
- normal_followers_count
|
||||
- notifications
|
||||
- pinned_tweet_ids_str
|
||||
- possibly_sensitive
|
||||
- profile_image_url_https
|
||||
- profile_interstitial_type
|
||||
- protected
|
||||
- screen_name
|
||||
- status
|
||||
- statuses_count
|
||||
- translator_type
|
||||
- verified
|
||||
- want_retweets
|
||||
UserResultCore:
|
||||
properties:
|
||||
user_results:
|
||||
$ref: '#/components/schemas/UserResults'
|
||||
required:
|
||||
- user_results
|
||||
UserResults:
|
||||
properties:
|
||||
result:
|
||||
$ref: '#/components/schemas/UserUnion'
|
||||
required:
|
||||
- result
|
||||
UserUnion:
|
||||
discriminator:
|
||||
mapping":
|
||||
User: '#/components/schemas/User'
|
||||
propertyName: __typename
|
||||
oneOf:
|
||||
- $ref: '#/components/schemas/User'
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
openapi: 3.0.3
|
||||
paths: {}
|
||||
File diff suppressed because it is too large
Load diff
BIN
requirements.txt
Normal file
BIN
requirements.txt
Normal file
Binary file not shown.
41
src/config/header.yaml
Normal file
41
src/config/header.yaml
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
openapi: 3.0.3
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
paths: {}
|
||||
|
||||
components:
|
||||
headers:
|
||||
x-connection-hash:
|
||||
schema:
|
||||
type: string
|
||||
x-content-type-options:
|
||||
schema:
|
||||
type: string
|
||||
x-frame-options:
|
||||
schema:
|
||||
type: string
|
||||
x-rate-limit-limit:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-remaining:
|
||||
schema:
|
||||
type: integer
|
||||
x-rate-limit-reset:
|
||||
schema:
|
||||
type: integer
|
||||
x-response-time:
|
||||
schema:
|
||||
type: integer
|
||||
x-tfe-preserve-body:
|
||||
schema:
|
||||
type: boolean
|
||||
x-transaction-id:
|
||||
schema:
|
||||
type: string
|
||||
x-twitter-response-tags:
|
||||
schema:
|
||||
type: string
|
||||
x-xss-protection:
|
||||
schema:
|
||||
type: integer
|
||||
30
src/config/parameters.yaml
Normal file
30
src/config/parameters.yaml
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
openapi: 3.0.3
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
paths:
|
||||
/parameters:
|
||||
get:
|
||||
parameters:
|
||||
- name: variables
|
||||
in: query
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
example: "{{Variables}}"
|
||||
- name: features
|
||||
in: query
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
example: "{{Features}}"
|
||||
- name: queryId
|
||||
in: query
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
default: "{{Query}}"
|
||||
example: "{{Query}}"
|
||||
responses:
|
||||
"200":
|
||||
description: ""
|
||||
234
src/config/placeholder.json
Normal file
234
src/config/placeholder.json
Normal file
|
|
@ -0,0 +1,234 @@
|
|||
{
|
||||
"HomeTimeline": {
|
||||
"Query": "HCosKfLNW1AcOo3la3mMgg",
|
||||
"Variables": {
|
||||
"count": 40,
|
||||
"includePromotedContent": true,
|
||||
"latestControlAvailable": true,
|
||||
"withCommunity": true
|
||||
},
|
||||
"Feature": {
|
||||
"blue_business_profile_image_shape_enabled": true,
|
||||
"responsive_web_graphql_exclude_directive_enabled": true,
|
||||
"verified_phone_label_enabled": false,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"tweetypie_unmention_optimization_enabled": true,
|
||||
"vibe_api_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,
|
||||
"tweet_awards_web_tipping_enabled": false,
|
||||
"freedom_of_speech_not_reach_fetch_enabled": false,
|
||||
"standardized_nudges_misinfo": true,
|
||||
"tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled": false,
|
||||
"interactive_text_enabled": true,
|
||||
"responsive_web_text_conversations_enabled": false,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"responsive_web_enhance_cards_enabled": false
|
||||
}
|
||||
},
|
||||
"HomeLatestTimeline": {
|
||||
"Query": "zhX91JE87mWvfprhYE97xA",
|
||||
"Variables": {
|
||||
"count": 20,
|
||||
"includePromotedContent": true,
|
||||
"latestControlAvailable": true,
|
||||
"requestContext": "launch"
|
||||
},
|
||||
"Feature": {
|
||||
"blue_business_profile_image_shape_enabled": true,
|
||||
"responsive_web_graphql_exclude_directive_enabled": true,
|
||||
"verified_phone_label_enabled": false,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"tweetypie_unmention_optimization_enabled": true,
|
||||
"vibe_api_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,
|
||||
"tweet_awards_web_tipping_enabled": false,
|
||||
"freedom_of_speech_not_reach_fetch_enabled": false,
|
||||
"standardized_nudges_misinfo": true,
|
||||
"tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled": false,
|
||||
"interactive_text_enabled": true,
|
||||
"responsive_web_text_conversations_enabled": false,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"responsive_web_enhance_cards_enabled": false
|
||||
}
|
||||
},
|
||||
"ListLatestTweetsTimeline": {
|
||||
"Query": "2TemLyqrMpTeAmysdbnVqw",
|
||||
"Variables": {
|
||||
"listId": "53044119",
|
||||
"count": 20
|
||||
},
|
||||
"Feature": {
|
||||
"blue_business_profile_image_shape_enabled": true,
|
||||
"responsive_web_graphql_exclude_directive_enabled": true,
|
||||
"verified_phone_label_enabled": false,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"tweetypie_unmention_optimization_enabled": true,
|
||||
"vibe_api_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,
|
||||
"tweet_awards_web_tipping_enabled": false,
|
||||
"freedom_of_speech_not_reach_fetch_enabled": false,
|
||||
"standardized_nudges_misinfo": true,
|
||||
"tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled": false,
|
||||
"interactive_text_enabled": true,
|
||||
"responsive_web_text_conversations_enabled": false,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"responsive_web_enhance_cards_enabled": false
|
||||
}
|
||||
},
|
||||
"UserByScreenName": {
|
||||
"Query": "sLVLhk0bGj3MVFEKTdax1w",
|
||||
"Variables": {
|
||||
"screen_name": "elonmusk",
|
||||
"withSafetyModeUserFields": true
|
||||
},
|
||||
"Features": {
|
||||
"blue_business_profile_image_shape_enabled": true,
|
||||
"responsive_web_graphql_exclude_directive_enabled": true,
|
||||
"verified_phone_label_enabled": false,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true
|
||||
}
|
||||
},
|
||||
"UserTweets": {
|
||||
"Query": "HuTx74BxAnezK1gWvYY7zg",
|
||||
"Variables": {
|
||||
"userId": "44196397",
|
||||
"count": 40,
|
||||
"includePromotedContent": true,
|
||||
"withQuickPromoteEligibilityTweetFields": true,
|
||||
"withVoice": true,
|
||||
"withV2Timeline": true
|
||||
},
|
||||
"Features": {
|
||||
"blue_business_profile_image_shape_enabled": true,
|
||||
"responsive_web_graphql_exclude_directive_enabled": true,
|
||||
"verified_phone_label_enabled": false,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"tweetypie_unmention_optimization_enabled": true,
|
||||
"vibe_api_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,
|
||||
"tweet_awards_web_tipping_enabled": false,
|
||||
"freedom_of_speech_not_reach_fetch_enabled": false,
|
||||
"standardized_nudges_misinfo": true,
|
||||
"tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled": false,
|
||||
"interactive_text_enabled": true,
|
||||
"responsive_web_text_conversations_enabled": false,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"responsive_web_enhance_cards_enabled": false
|
||||
}
|
||||
},
|
||||
"UserTweetsAndReplies": {
|
||||
"Query": "RIWc55YCNyUJ-U3HHGYkdg",
|
||||
"Variables": {
|
||||
"userId": "44196397",
|
||||
"count": 40,
|
||||
"includePromotedContent": true,
|
||||
"withCommunity": true,
|
||||
"withVoice": true,
|
||||
"withV2Timeline": true
|
||||
},
|
||||
"Features": {
|
||||
"blue_business_profile_image_shape_enabled": true,
|
||||
"responsive_web_graphql_exclude_directive_enabled": true,
|
||||
"verified_phone_label_enabled": false,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"tweetypie_unmention_optimization_enabled": true,
|
||||
"vibe_api_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,
|
||||
"tweet_awards_web_tipping_enabled": false,
|
||||
"freedom_of_speech_not_reach_fetch_enabled": false,
|
||||
"standardized_nudges_misinfo": true,
|
||||
"tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled": false,
|
||||
"interactive_text_enabled": true,
|
||||
"responsive_web_text_conversations_enabled": false,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"responsive_web_enhance_cards_enabled": false
|
||||
}
|
||||
},
|
||||
"UserMedia": {
|
||||
"Query": "YqiE3JL1KNgf9nSljYdxaA",
|
||||
"Variables": {
|
||||
"userId": "44196397",
|
||||
"count": 20,
|
||||
"includePromotedContent": false,
|
||||
"withClientEventToken": false,
|
||||
"withBirdwatchNotes": false,
|
||||
"withVoice": true,
|
||||
"withV2Timeline": true
|
||||
},
|
||||
"Features": {
|
||||
"blue_business_profile_image_shape_enabled": true,
|
||||
"responsive_web_graphql_exclude_directive_enabled": true,
|
||||
"verified_phone_label_enabled": false,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"tweetypie_unmention_optimization_enabled": true,
|
||||
"vibe_api_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,
|
||||
"tweet_awards_web_tipping_enabled": false,
|
||||
"freedom_of_speech_not_reach_fetch_enabled": false,
|
||||
"standardized_nudges_misinfo": true,
|
||||
"tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled": false,
|
||||
"interactive_text_enabled": true,
|
||||
"responsive_web_text_conversations_enabled": false,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"responsive_web_enhance_cards_enabled": false
|
||||
}
|
||||
},
|
||||
"Likes": {
|
||||
"Query": "5fmEkRT-1AdHqEsbVgehMg",
|
||||
"Variables": {
|
||||
"userId": "44196397",
|
||||
"count": 20,
|
||||
"includePromotedContent": false,
|
||||
"withClientEventToken": false,
|
||||
"withBirdwatchNotes": false,
|
||||
"withVoice": true,
|
||||
"withV2Timeline": true
|
||||
},
|
||||
"Features": {
|
||||
"blue_business_profile_image_shape_enabled": true,
|
||||
"responsive_web_graphql_exclude_directive_enabled": true,
|
||||
"verified_phone_label_enabled": false,
|
||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||
"tweetypie_unmention_optimization_enabled": true,
|
||||
"vibe_api_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,
|
||||
"tweet_awards_web_tipping_enabled": false,
|
||||
"freedom_of_speech_not_reach_fetch_enabled": false,
|
||||
"standardized_nudges_misinfo": true,
|
||||
"tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled": false,
|
||||
"interactive_text_enabled": true,
|
||||
"responsive_web_text_conversations_enabled": false,
|
||||
"longform_notetweets_rich_text_read_enabled": true,
|
||||
"responsive_web_enhance_cards_enabled": false
|
||||
}
|
||||
}
|
||||
}
|
||||
94
src/openapi/openapi-3.0.yaml
Normal file
94
src/openapi/openapi-3.0.yaml
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
openapi: 3.0.3
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
description: |-
|
||||
Twitter OpenAPI(Swagger) specification
|
||||
termsOfService: https://github.com/fa0311
|
||||
contact:
|
||||
email: yuki@yuki0311.com
|
||||
license:
|
||||
name: GNU Affero General Public License v3.
|
||||
url: https://raw.githubusercontent.com/fa0311/twitter-openapi/main/LICENSE.txt
|
||||
version: 0.0.1
|
||||
servers:
|
||||
- url: https://twitter.com/i/api/graphql
|
||||
|
||||
paths: {}
|
||||
components:
|
||||
schemas: {}
|
||||
|
||||
securitySchemes:
|
||||
BearerAuth:
|
||||
type: http
|
||||
scheme: bearer
|
||||
description: "AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA"
|
||||
|
||||
CsrfToken:
|
||||
type: apiKey
|
||||
in: header
|
||||
name: x-csrf-token
|
||||
|
||||
ActiveUser:
|
||||
type: apiKey
|
||||
in: header
|
||||
name: x-twitter-active-user
|
||||
description: "yes"
|
||||
|
||||
AuthType:
|
||||
type: apiKey
|
||||
in: header
|
||||
name: x-twitter-auth-type
|
||||
description: "OAuth2Session"
|
||||
|
||||
ClientLanguage:
|
||||
type: apiKey
|
||||
in: header
|
||||
name: x-twitter-client-language
|
||||
description: "en"
|
||||
|
||||
CookieAuthToken:
|
||||
type: apiKey
|
||||
in: cookie
|
||||
name: auth_token
|
||||
|
||||
CookieCt0:
|
||||
type: apiKey
|
||||
in: cookie
|
||||
name: ct0
|
||||
|
||||
tags:
|
||||
- name: timeline
|
||||
description: timeline
|
||||
- name: tweet
|
||||
description: tweet
|
||||
- name: user
|
||||
description: user
|
||||
- name: follow
|
||||
description: follow
|
||||
- name: search
|
||||
description: search
|
||||
- name: dm
|
||||
description: dm
|
||||
- name: settings
|
||||
description: settings
|
||||
- name: notify
|
||||
description: notify
|
||||
|
||||
# ===
|
||||
- name: login required
|
||||
description: login session required
|
||||
- name: graphql
|
||||
description: graphql
|
||||
- name: login-flow
|
||||
description: login flow
|
||||
- name: report-flow
|
||||
description: report flow
|
||||
|
||||
security:
|
||||
- bearerAuth: []
|
||||
- CsrfToken: []
|
||||
- ActiveUser: []
|
||||
- AuthType: []
|
||||
- ClientLanguage: []
|
||||
- CookieAuthToken: []
|
||||
- CookieCt0: []
|
||||
27
src/openapi/path/follow.yaml
Normal file
27
src/openapi/path/follow.yaml
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
openapi: 3.0.3
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
|
||||
paths:
|
||||
/{{FollowingQuery}}/Following:
|
||||
get:
|
||||
operationId: getFollowers
|
||||
description: get user list of followers
|
||||
responses:
|
||||
"200":
|
||||
description: Successful operation
|
||||
tags:
|
||||
- "follow"
|
||||
- "graphql"
|
||||
|
||||
/{{FollowersQuery}}/Followers:
|
||||
get:
|
||||
operationId: getFollowing
|
||||
description: get user list of following
|
||||
responses:
|
||||
"200":
|
||||
description: Successful operation
|
||||
tags:
|
||||
- "follow"
|
||||
- "graphql"
|
||||
104
src/openapi/path/timeline.yaml
Normal file
104
src/openapi/path/timeline.yaml
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
openapi: 3.0.3
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
|
||||
paths:
|
||||
/{{HomeTimelineQuery}}/HomeTimeline:
|
||||
get:
|
||||
operationId: getHomeTimeline
|
||||
description: get tweet list of timeline
|
||||
responses:
|
||||
"200":
|
||||
description: Successful operation
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/TimelineResponse"
|
||||
tags:
|
||||
- "timeline"
|
||||
- "login-required"
|
||||
- "graphql"
|
||||
|
||||
/{{HomeLatestTimelineQuery}}/HomeLatestTimeline:
|
||||
get:
|
||||
operationId: getHomeLatestTimeline
|
||||
description: get tweet list of timeline
|
||||
responses:
|
||||
"200":
|
||||
description: Successful operation
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/TimelineResponse"
|
||||
tags:
|
||||
- "timeline"
|
||||
- "login-required"
|
||||
- "graphql"
|
||||
|
||||
/{{ListLatestTweetsTimelineQuery}}/ListLatestTweetsTimeline:
|
||||
get:
|
||||
operationId: getListLatestTweetsTimeline
|
||||
description: get tweet list of timeline
|
||||
responses:
|
||||
"200":
|
||||
description: Successful operation
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ListTweetsTimelineResponse"
|
||||
tags:
|
||||
- "timeline"
|
||||
- "login-required"
|
||||
- "graphql"
|
||||
|
||||
components:
|
||||
schemas:
|
||||
TimelineResponse:
|
||||
required:
|
||||
- "data"
|
||||
properties:
|
||||
data:
|
||||
$ref: "#/components/schemas/HomeTimelineResponseData"
|
||||
|
||||
HomeTimelineResponseData:
|
||||
required:
|
||||
- "home"
|
||||
properties:
|
||||
home:
|
||||
$ref: "#/components/schemas/HomeTimelineHome"
|
||||
|
||||
HomeTimelineHome:
|
||||
required:
|
||||
- "home_timeline_urt"
|
||||
properties:
|
||||
home_timeline_urt:
|
||||
$ref: "./../schemas/timeline.yaml#/components/schemas/Timeline"
|
||||
|
||||
ListTweetsTimelineResponse:
|
||||
required:
|
||||
- "data"
|
||||
properties:
|
||||
data:
|
||||
$ref: "#/components/schemas/ListTweetsTimelineData"
|
||||
|
||||
ListTweetsTimelineData:
|
||||
required:
|
||||
- "list"
|
||||
properties:
|
||||
home:
|
||||
$ref: "#/components/schemas/ListTweetsTimelineList"
|
||||
|
||||
ListTweetsTimelineList:
|
||||
required:
|
||||
- "tweets_timeline"
|
||||
properties:
|
||||
tweets_timeline:
|
||||
$ref: "#/components/schemas/ListTweetsTimeline"
|
||||
|
||||
ListTweetsTimeline:
|
||||
required:
|
||||
- "timeline"
|
||||
properties:
|
||||
timeline:
|
||||
$ref: "./../schemas/timeline.yaml#/components/schemas/Timeline"
|
||||
36
src/openapi/path/user.yaml
Normal file
36
src/openapi/path/user.yaml
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
openapi: 3.0.3
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
|
||||
paths:
|
||||
/{{UserByScreenNameQuery}}/UserByScreenName:
|
||||
get:
|
||||
operationId: getUserByScreenName
|
||||
description: "get user by screen name"
|
||||
responses:
|
||||
"200":
|
||||
description: Successful operation
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/UserResponse"
|
||||
tags:
|
||||
- "user"
|
||||
- "graphql"
|
||||
|
||||
components:
|
||||
schemas:
|
||||
UserResponse:
|
||||
required:
|
||||
- "data"
|
||||
properties:
|
||||
data:
|
||||
$ref: "#/components/schemas/UserResponseData"
|
||||
|
||||
UserResponseData:
|
||||
required:
|
||||
- "user"
|
||||
properties:
|
||||
user:
|
||||
$ref: "./../schemas/user.yaml#/components/schemas/UserResults"
|
||||
98
src/openapi/path/usertweets.yaml
Normal file
98
src/openapi/path/usertweets.yaml
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
openapi: 3.0.3
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
|
||||
paths:
|
||||
/{{UserTweetsQuery}}/UserTweets:
|
||||
get:
|
||||
operationId: getUserTweets
|
||||
description: "get user tweets"
|
||||
responses:
|
||||
"200":
|
||||
description: Successful operation
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/UserTweetsResponse"
|
||||
tags:
|
||||
- "user"
|
||||
- "graphql"
|
||||
|
||||
/{{UserTweetsAndRepliesQuery}}/UserTweetsAndReplies:
|
||||
get:
|
||||
operationId: getUserTweetsAndReplies
|
||||
description: "get user replies tweets"
|
||||
responses:
|
||||
"200":
|
||||
description: Successful operation
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/UserTweetsResponse"
|
||||
tags:
|
||||
- "user"
|
||||
- "graphql"
|
||||
|
||||
/{{UserMediaQuery}}/UserMedia:
|
||||
get:
|
||||
operationId: getUserMedia
|
||||
description: "get user media tweets"
|
||||
responses:
|
||||
"200":
|
||||
description: Successful operation
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/UserTweetsResponse"
|
||||
tags:
|
||||
- "user"
|
||||
- "graphql"
|
||||
|
||||
/{{LikesQuery}}/Likes:
|
||||
get:
|
||||
operationId: getLikes
|
||||
description: "get user likes tweets"
|
||||
responses:
|
||||
"200":
|
||||
description: Successful operation
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/UserTweetsResponse"
|
||||
tags:
|
||||
- "user"
|
||||
- "graphql"
|
||||
|
||||
components:
|
||||
schemas:
|
||||
UserTweetsResponse:
|
||||
required:
|
||||
- "data"
|
||||
properties:
|
||||
data:
|
||||
$ref: "#/components/schemas/UserTweetsData"
|
||||
|
||||
UserTweetsData:
|
||||
required:
|
||||
- "user"
|
||||
properties:
|
||||
user:
|
||||
$ref: "#/components/schemas/UserTweetsUser"
|
||||
|
||||
UserTweetsUser:
|
||||
required:
|
||||
- "result"
|
||||
properties:
|
||||
result:
|
||||
$ref: "#/components/schemas/UserTweetsResult"
|
||||
|
||||
UserTweetsResult:
|
||||
required:
|
||||
- "__typename"
|
||||
- "timeline_v2"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./../schemas/typename.yaml#/components/schemas/TypeName" # User
|
||||
timeline_v2:
|
||||
$ref: "./../schemas/timeline.yaml#/components/schemas/TimelineV2"
|
||||
110
src/openapi/schemas/content.yaml
Normal file
110
src/openapi/schemas/content.yaml
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
openapi: 3.0.3
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
|
||||
paths: {}
|
||||
components:
|
||||
schemas:
|
||||
ContentUnion:
|
||||
oneOf:
|
||||
- $ref: "#/components/schemas/TimelineTimelineItem"
|
||||
- $ref: "#/components/schemas/TimelineTimelineCursor"
|
||||
- $ref: "#/components/schemas/TimelineTimelineModule"
|
||||
discriminator:
|
||||
propertyName: entryType
|
||||
mapping": # deprecated
|
||||
TimelineTimelineItem: "#/components/schemas/TimelineTimelineItem"
|
||||
TimelineTimelineCursor: "#/components/schemas/TimelineTimelineCursor"
|
||||
TimelineTimelineModule: "#/components/schemas/TimelineTimelineModule"
|
||||
|
||||
ContentEntryType:
|
||||
type: string
|
||||
enum:
|
||||
[TimelineTimelineItem, TimelineTimelineCursor, TimelineTimelineModule]
|
||||
|
||||
TimelineTimelineItem:
|
||||
required:
|
||||
- "__typename"
|
||||
- "entryType"
|
||||
- "itemContent"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # TimelineTimelineItem
|
||||
entryType:
|
||||
type: string # enum
|
||||
$ref: "#/components/schemas/ContentEntryType" # TimelineTimelineItem
|
||||
itemContent:
|
||||
$ref: "#/components/schemas/ItemContent"
|
||||
clientEventInfo:
|
||||
type: object # todo
|
||||
feedbackInfo:
|
||||
type: object # todo
|
||||
|
||||
TimelineTimelineCursor:
|
||||
required:
|
||||
- "__typename"
|
||||
- "entryType"
|
||||
- "cursorType"
|
||||
- "value"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # TimelineTimelineCursor
|
||||
entryType:
|
||||
type: string # enum
|
||||
$ref: "#/components/schemas/ContentEntryType" # TimelineTimelineCursor
|
||||
cursorType:
|
||||
type: string
|
||||
enum: [Top, Bottom]
|
||||
value:
|
||||
type: string
|
||||
|
||||
TimelineTimelineModule:
|
||||
required:
|
||||
- "__typename"
|
||||
- "entryType"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # TimelineTimelineModule
|
||||
|
||||
entryType:
|
||||
type: string # enum
|
||||
$ref: "#/components/schemas/ContentEntryType" # TimelineTimelineCursor
|
||||
|
||||
# ================= ContentItem =================
|
||||
ContentItemType:
|
||||
type: string
|
||||
enum: [TimelineTweet]
|
||||
|
||||
ItemContent:
|
||||
required:
|
||||
- "__typename"
|
||||
- "itemType"
|
||||
- "tweetDisplayType"
|
||||
- "tweet_results"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # TimelineTweet
|
||||
itemType:
|
||||
type: string # enum
|
||||
$ref: "#/components/schemas/ContentItemType" # TimelineTweet
|
||||
tweetDisplayType:
|
||||
type: string
|
||||
tweet_results:
|
||||
$ref: "#/components/schemas/ItemResult"
|
||||
socialContext:
|
||||
type: object
|
||||
properties:
|
||||
contextType:
|
||||
type: string # enum
|
||||
text:
|
||||
type: string
|
||||
type:
|
||||
type: string # enum
|
||||
|
||||
ItemResult:
|
||||
required:
|
||||
- "result"
|
||||
properties:
|
||||
result:
|
||||
$ref: "./tweet.yaml#/components/schemas/TweetUnion"
|
||||
12
src/openapi/schemas/general.yaml
Normal file
12
src/openapi/schemas/general.yaml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
openapi: 3.0.3
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
|
||||
paths: {}
|
||||
components:
|
||||
schemas:
|
||||
TwitterTimeFormat:
|
||||
type: string
|
||||
pattern: "^(Sun|Mon|Tue|Wed|Thu|Fri|Sat) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (0[1-9]|[12][0-9]|3[01]) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]) ([+-][0-9]{4}) ([0-9]{4})$"
|
||||
example: "Sat Dec 31 23:59:59 +0000 2023"
|
||||
70
src/openapi/schemas/instruction.yaml
Normal file
70
src/openapi/schemas/instruction.yaml
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
openapi: 3.0.3
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
|
||||
paths: {}
|
||||
components:
|
||||
schemas:
|
||||
InstructionUnion:
|
||||
oneOf:
|
||||
- $ref: "#/components/schemas/TimelineAddEntries"
|
||||
- $ref: "#/components/schemas/TimelineClearCache"
|
||||
- $ref: "#/components/schemas/TimelinePinEntry"
|
||||
discriminator:
|
||||
propertyName: type
|
||||
mapping": # deprecated
|
||||
TimelineAddEntries: "#/components/schemas/TimelineAddEntries"
|
||||
TimelineClearCache: "#/components/schemas/TimelineClearCache"
|
||||
TimelinePinEntry: "#/components/schemas/TimelinePinEntry"
|
||||
|
||||
InstructionType:
|
||||
type: string
|
||||
enum: [TimelineAddEntries, TimelineClearCache, TimelinePinEntry]
|
||||
|
||||
TimelineAddEntries:
|
||||
required:
|
||||
- type
|
||||
- entries
|
||||
properties:
|
||||
type:
|
||||
type: string
|
||||
$ref: "#/components/schemas/InstructionType" # TimelineAddEntries
|
||||
entries:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/TimelineAddEntry"
|
||||
|
||||
TimelineClearCache:
|
||||
required:
|
||||
- type
|
||||
properties:
|
||||
type:
|
||||
type: string
|
||||
$ref: "#/components/schemas/InstructionType" # TimelineClearCache
|
||||
|
||||
TimelinePinEntry:
|
||||
required:
|
||||
- type
|
||||
- entry
|
||||
properties:
|
||||
type:
|
||||
type: string
|
||||
$ref: "#/components/schemas/InstructionType" # TimelinePinEntry
|
||||
entry:
|
||||
$ref: "#/components/schemas/TimelineAddEntry"
|
||||
|
||||
TimelineAddEntry:
|
||||
required:
|
||||
- "content"
|
||||
- "entryId"
|
||||
- "sortIndex"
|
||||
properties:
|
||||
content:
|
||||
$ref: "./content.yaml#/components/schemas/ContentUnion"
|
||||
entryId:
|
||||
type: string
|
||||
pattern: '^[a-z\-]+[0-9]+$'
|
||||
sortIndex:
|
||||
type: string
|
||||
pattern: "[0-9]+$"
|
||||
27
src/openapi/schemas/timeline.yaml
Normal file
27
src/openapi/schemas/timeline.yaml
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
openapi: 3.0.3
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
|
||||
paths: {}
|
||||
components:
|
||||
schemas:
|
||||
TimelineV2:
|
||||
required:
|
||||
- "timeline"
|
||||
properties:
|
||||
timeline:
|
||||
$ref: "#/components/schemas/Timeline"
|
||||
|
||||
Timeline:
|
||||
required:
|
||||
- "instructions"
|
||||
properties:
|
||||
instructions:
|
||||
type: array
|
||||
items:
|
||||
$ref: "./../schemas/instruction.yaml#/components/schemas/InstructionUnion"
|
||||
metadata:
|
||||
type: object # todo
|
||||
responseObjects:
|
||||
type: object # todo
|
||||
152
src/openapi/schemas/tweet.yaml
Normal file
152
src/openapi/schemas/tweet.yaml
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
openapi: 3.0.3
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
|
||||
paths: {}
|
||||
|
||||
components:
|
||||
schemas:
|
||||
TweetUnion:
|
||||
oneOf:
|
||||
- $ref: "#/components/schemas/Tweet"
|
||||
- $ref: "#/components/schemas/TweetWithVisibilityResults"
|
||||
discriminator:
|
||||
propertyName: __typename
|
||||
mapping": # deprecated
|
||||
Tweet: "#/components/schemas/Tweet"
|
||||
TweetWithVisibilityResults: "#/components/schemas/TweetWithVisibilityResults"
|
||||
|
||||
TweetWithVisibilityResults:
|
||||
required:
|
||||
- "__typename"
|
||||
- "tweet"
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # TweetWithVisibilityResults
|
||||
tweet:
|
||||
$ref: "#/components/schemas/Tweet"
|
||||
|
||||
Tweet:
|
||||
required:
|
||||
# - "__typename"
|
||||
- "rest_id"
|
||||
- "core"
|
||||
- "edit_control"
|
||||
- "edit_prespective"
|
||||
- "is_translatable"
|
||||
- "legacy"
|
||||
- "views"
|
||||
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # Tweet
|
||||
rest_id:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
core:
|
||||
$ref: "./user.yaml#/components/schemas/UserResultCore"
|
||||
unmention_data:
|
||||
type: object # todo
|
||||
edit_control:
|
||||
type: object
|
||||
properties:
|
||||
edit_tweet_ids:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
editable_until_msecs:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
is_edit_eligible:
|
||||
type: boolean
|
||||
edits_remaining:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
edit_prespective:
|
||||
type: object
|
||||
properties:
|
||||
favorited:
|
||||
type: boolean
|
||||
retweeted:
|
||||
type: boolean
|
||||
is_translatable:
|
||||
type: boolean
|
||||
default: false
|
||||
legacy:
|
||||
$ref: "#/components/schemas/TweetLegacy"
|
||||
views:
|
||||
type: object
|
||||
properties:
|
||||
count:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
state:
|
||||
type: string # enum
|
||||
|
||||
TweetLegacy:
|
||||
required:
|
||||
- "bookmark_count"
|
||||
- "bookmarked"
|
||||
- "conversation_id_str"
|
||||
- "created_at"
|
||||
- "display_text_range"
|
||||
- "entities"
|
||||
- "favorite_count"
|
||||
- "favorited"
|
||||
- "full_text"
|
||||
- "is_quote_status"
|
||||
- "lang"
|
||||
- "quote_count"
|
||||
- "reply_count"
|
||||
- "retweet_count"
|
||||
- "retweeted"
|
||||
- "user_id_str"
|
||||
- "id_str"
|
||||
properties:
|
||||
bookmark_count:
|
||||
type: integer
|
||||
bookmarked:
|
||||
type: boolean
|
||||
created_at:
|
||||
$ref: "./general.yaml#/components/schemas/TwitterTimeFormat"
|
||||
conversation_id_str:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
display_text_range:
|
||||
type: array
|
||||
items:
|
||||
type: integer
|
||||
entities:
|
||||
type: object
|
||||
favorite_count:
|
||||
type: integer
|
||||
favorited:
|
||||
type: boolean
|
||||
full_text:
|
||||
type: string
|
||||
is_quote_status:
|
||||
type: boolean
|
||||
lang:
|
||||
type: string # enum
|
||||
possibly_sensitive:
|
||||
type: boolean
|
||||
default: false
|
||||
possibly_sensitive_editable:
|
||||
type: boolean
|
||||
default: false
|
||||
quote_count:
|
||||
type: integer
|
||||
reply_count:
|
||||
type: integer
|
||||
retweet_count:
|
||||
type: integer
|
||||
retweeted:
|
||||
type: boolean
|
||||
user_id_str:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
id_str:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
19
src/openapi/schemas/typename.yaml
Normal file
19
src/openapi/schemas/typename.yaml
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
openapi: 3.0.3
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
paths: {}
|
||||
components:
|
||||
schemas:
|
||||
TypeName:
|
||||
type: string
|
||||
enum:
|
||||
[
|
||||
TimelineTweet,
|
||||
TimelineTimelineItem,
|
||||
TimelineTimelineCursor,
|
||||
TweetWithVisibilityResults,
|
||||
TimelineTimelineModule,
|
||||
Tweet,
|
||||
User,
|
||||
]
|
||||
219
src/openapi/schemas/user.yaml
Normal file
219
src/openapi/schemas/user.yaml
Normal file
|
|
@ -0,0 +1,219 @@
|
|||
openapi: 3.0.3
|
||||
info:
|
||||
title: Twitter OpenAPI
|
||||
version: 0.0.1
|
||||
paths: {}
|
||||
components:
|
||||
schemas:
|
||||
UserResultCore:
|
||||
required:
|
||||
- "user_results"
|
||||
properties:
|
||||
user_results:
|
||||
$ref: "#/components/schemas/UserResults"
|
||||
|
||||
UserResults:
|
||||
required:
|
||||
- "result"
|
||||
properties:
|
||||
result:
|
||||
$ref: "#/components/schemas/UserUnion"
|
||||
|
||||
UserUnion:
|
||||
oneOf:
|
||||
- $ref: "#/components/schemas/User"
|
||||
discriminator:
|
||||
propertyName: __typename
|
||||
mapping": # deprecated
|
||||
User: "#/components/schemas/User"
|
||||
|
||||
User:
|
||||
required:
|
||||
- "__typename"
|
||||
- "affiliates_highlighted_label"
|
||||
- "has_graduated_access"
|
||||
- "id"
|
||||
- "is_blue_verified"
|
||||
- "legacy"
|
||||
- "rest_id"
|
||||
- "super_follow_eligible"
|
||||
- "super_followed_by"
|
||||
- "super_following"
|
||||
|
||||
properties:
|
||||
__typename:
|
||||
$ref: "./typename.yaml#/components/schemas/TypeName" # User
|
||||
affiliates_highlighted_label:
|
||||
type: object # todo
|
||||
has_graduated_access:
|
||||
type: boolean
|
||||
has_nft_avatar:
|
||||
type: boolean
|
||||
default: false
|
||||
id:
|
||||
type: string
|
||||
pattern: '^[a-z\-]+[0-9]+$'
|
||||
is_blue_verified:
|
||||
type: boolean
|
||||
default: false
|
||||
legacy:
|
||||
$ref: "#/components/schemas/UserLegacy"
|
||||
rest_id:
|
||||
type: string
|
||||
pattern: "^[0-9]+$"
|
||||
business_account:
|
||||
type: object # todo
|
||||
super_follow_eligible:
|
||||
type: boolean
|
||||
default: false
|
||||
super_followed_by:
|
||||
type: boolean
|
||||
default: false
|
||||
super_following:
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
UserLegacy:
|
||||
required:
|
||||
- "blocked_by"
|
||||
- "blocking"
|
||||
- "can_dm"
|
||||
- "can_media_tag"
|
||||
- "created_at"
|
||||
- "default_profile"
|
||||
- "default_profile_image"
|
||||
- "description"
|
||||
- "entities"
|
||||
- "fast_followers_count"
|
||||
- "favourites_count"
|
||||
- "follow_request_sent"
|
||||
- "followed_by"
|
||||
- "followers_count"
|
||||
- "following"
|
||||
- "friends_count"
|
||||
- "has_custom_timelines"
|
||||
- "is_translator"
|
||||
- "listed_count"
|
||||
- "location"
|
||||
- "media_count"
|
||||
- "muting"
|
||||
- "name"
|
||||
- "normal_followers_count"
|
||||
- "notifications"
|
||||
- "pinned_tweet_ids_str"
|
||||
- "possibly_sensitive"
|
||||
- "profile_image_url_https"
|
||||
- "profile_interstitial_type"
|
||||
- "protected"
|
||||
- "screen_name"
|
||||
- "status"
|
||||
- "statuses_count"
|
||||
- "translator_type"
|
||||
- "verified"
|
||||
- "want_retweets"
|
||||
properties:
|
||||
blocked_by:
|
||||
type: boolean
|
||||
default: false
|
||||
blocking:
|
||||
type: boolean
|
||||
default: false
|
||||
can_dm:
|
||||
type: boolean
|
||||
default: false
|
||||
can_media_tag:
|
||||
type: boolean
|
||||
default: false
|
||||
created_at:
|
||||
$ref: "./general.yaml#/components/schemas/TwitterTimeFormat"
|
||||
default_profile:
|
||||
type: boolean
|
||||
default: false
|
||||
default_profile_image:
|
||||
type: boolean
|
||||
default: false
|
||||
description:
|
||||
type: string
|
||||
entities:
|
||||
type: object # todo
|
||||
fast_followers_count:
|
||||
type: integer
|
||||
favourites_count:
|
||||
type: integer
|
||||
default: 0
|
||||
follow_request_sent:
|
||||
type: boolean
|
||||
default: false
|
||||
followed_by:
|
||||
type: boolean
|
||||
default: false
|
||||
followers_count:
|
||||
type: integer
|
||||
default: 0
|
||||
following:
|
||||
type: boolean
|
||||
default: false
|
||||
friends_count:
|
||||
type: integer
|
||||
default: 0
|
||||
has_custom_timelines:
|
||||
type: boolean
|
||||
default: false
|
||||
is_translator:
|
||||
type: boolean
|
||||
default: false
|
||||
listed_count:
|
||||
type: integer
|
||||
default: 0
|
||||
location:
|
||||
type: string
|
||||
media_count:
|
||||
type: integer
|
||||
default: 0
|
||||
muting:
|
||||
type: boolean
|
||||
default: false
|
||||
name:
|
||||
type: string
|
||||
normal_followers_count:
|
||||
type: integer
|
||||
default: 0
|
||||
notifications:
|
||||
type: boolean
|
||||
default: false
|
||||
pinned_tweet_ids_str:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
possibly_sensitive:
|
||||
type: boolean
|
||||
default: false
|
||||
profile_banner_extensions:
|
||||
type: object
|
||||
profile_banner_url:
|
||||
type: string
|
||||
format: uri
|
||||
profile_image_extensions:
|
||||
type: object
|
||||
profile_image_url_https:
|
||||
type: string
|
||||
format: uri
|
||||
profile_interstitial_type:
|
||||
type: string
|
||||
protected:
|
||||
type: boolean
|
||||
default: false
|
||||
screen_name:
|
||||
type: string
|
||||
statuses_count:
|
||||
type: integer
|
||||
default: 0
|
||||
translator_type:
|
||||
type: string
|
||||
url:
|
||||
type: string
|
||||
verified:
|
||||
type: boolean
|
||||
want_retweets:
|
||||
type: boolean
|
||||
default: false
|
||||
92
tools/build.py
Normal file
92
tools/build.py
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
import os
|
||||
import glob
|
||||
import json
|
||||
import yaml
|
||||
import shutil
|
||||
|
||||
|
||||
class placeholder_manager:
|
||||
data: dict
|
||||
config: str = "src/config/placeholder.json"
|
||||
|
||||
def __init__(self):
|
||||
with open(self.config, mode="r", encoding="utf-8") as f:
|
||||
self.data = json.load(f)
|
||||
|
||||
def __replace(self, file, old: str, new) -> str:
|
||||
if type(new) is dict:
|
||||
dump = f"'{json.dumps(new)}'"
|
||||
return file.replace(f'"{old}"', dump)
|
||||
else:
|
||||
return file.replace(f"{old}", new)
|
||||
|
||||
def replace(self, file: str) -> str:
|
||||
for prefix in self.data.keys():
|
||||
for key in self.data[prefix]:
|
||||
value = self.data[prefix][key]
|
||||
file = self.__replace(file, f"{{{{{prefix}{key}}}}}", value)
|
||||
return file
|
||||
|
||||
def replace_file(self, file: str, prefix: str) -> str:
|
||||
if self.data.get(prefix, None) is None:
|
||||
return file
|
||||
for key in self.data[prefix].keys():
|
||||
value = self.data[prefix][key]
|
||||
file = self.__replace(file, f"{{{{{key}}}}}", value)
|
||||
return file
|
||||
|
||||
|
||||
OUTPUT_DIR = "dist"
|
||||
INPUT_DIR = "src/openapi"
|
||||
|
||||
|
||||
def read(file: str):
|
||||
with open(file, mode="r", encoding="utf-8") as f:
|
||||
return f.read()
|
||||
|
||||
|
||||
def write(file: str, data: str) -> None:
|
||||
with open(file.replace(INPUT_DIR, OUTPUT_DIR, 1), mode="w+", encoding="utf-8") as f:
|
||||
f.write(data)
|
||||
|
||||
|
||||
def get_yaml(data, key):
|
||||
return yaml.safe_load(placeholder.replace_file(str(data), key))
|
||||
|
||||
|
||||
shutil.rmtree("dist")
|
||||
for dir in glob.glob(os.path.join(INPUT_DIR, "**/")):
|
||||
os.makedirs(dir.replace(INPUT_DIR, OUTPUT_DIR, 1), exist_ok=True)
|
||||
|
||||
placeholder = placeholder_manager()
|
||||
parameters = read("src/config/parameters.yaml")
|
||||
header = read("src/config/header.yaml")
|
||||
|
||||
paths = {}
|
||||
for file in glob.glob(os.path.join(INPUT_DIR, "**/*.yaml")):
|
||||
file = file.replace(os.path.sep, "/")
|
||||
relative = file.replace(INPUT_DIR, "", 1)
|
||||
|
||||
load = yaml.safe_load(placeholder.replace(read(file)))
|
||||
|
||||
for key in load["paths"].keys():
|
||||
append = get_yaml(parameters, key.split("/")[-1])
|
||||
req = load["paths"][key]["get"]
|
||||
req["parameters"] = append["paths"]["/parameters"]["get"]["parameters"]
|
||||
|
||||
append = get_yaml(header, key.split("/")[-1])
|
||||
req = load["paths"][key]["get"]
|
||||
req["responses"]["200"]["headers"] = append["components"]["headers"]
|
||||
|
||||
escape = key.replace("/", "~1")
|
||||
paths.update({key: {"$ref": f".{relative}#/paths/{escape}"}})
|
||||
write(file, yaml.dump(load))
|
||||
|
||||
|
||||
file = "src/openapi/openapi-3.0.yaml"
|
||||
data = read(file)
|
||||
for path in paths:
|
||||
load = yaml.safe_load(placeholder.replace(data))
|
||||
load["paths"] = paths
|
||||
|
||||
write(file, yaml.dump(load))
|
||||
Loading…
Add table
Add a link
Reference in a new issue