twitter-openapi-python 0.0.22__py3-none-any.whl → 0.0.24__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- twitter_openapi_python/api/initial_state_api.py +2 -1
- twitter_openapi_python/api/post_api.py +54 -21
- twitter_openapi_python/api/tweet_api.py +13 -4
- twitter_openapi_python/api/user_list_api.py +7 -2
- twitter_openapi_python/client.py +57 -47
- twitter_openapi_python/utils/__init__.py +1 -0
- twitter_openapi_python/utils/api.py +5 -0
- {twitter_openapi_python-0.0.22.dist-info → twitter_openapi_python-0.0.24.dist-info}/METADATA +2 -2
- {twitter_openapi_python-0.0.22.dist-info → twitter_openapi_python-0.0.24.dist-info}/RECORD +13 -13
- {twitter_openapi_python-0.0.22.dist-info → twitter_openapi_python-0.0.24.dist-info}/LICENSE +0 -0
- {twitter_openapi_python-0.0.22.dist-info → twitter_openapi_python-0.0.24.dist-info}/LICENSE.AGPL +0 -0
- {twitter_openapi_python-0.0.22.dist-info → twitter_openapi_python-0.0.24.dist-info}/WHEEL +0 -0
- {twitter_openapi_python-0.0.22.dist-info → twitter_openapi_python-0.0.24.dist-info}/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ import twitter_openapi_python_generated as twitter
|
|
|
4
4
|
import twitter_openapi_python_generated.models as models
|
|
5
5
|
|
|
6
6
|
from twitter_openapi_python.models import TwitterApiUtilsResponse
|
|
7
|
-
from twitter_openapi_python.utils import build_response, check_error
|
|
7
|
+
from twitter_openapi_python.utils import build_response, check_error, non_nullable
|
|
8
8
|
|
|
9
9
|
T = TypeVar("T")
|
|
10
10
|
ResponseType = TwitterApiUtilsResponse[T]
|
|
@@ -31,21 +31,44 @@ class PostApiUtils:
|
|
|
31
31
|
self,
|
|
32
32
|
tweet_text: str,
|
|
33
33
|
media_ids: Optional[list[str]] = None,
|
|
34
|
+
tagged_users: Optional[list[list[str]]] = None,
|
|
35
|
+
in_reply_to_tweet_id: Optional[str] = None,
|
|
36
|
+
attachment_url: Optional[str] = None,
|
|
37
|
+
conversation_control: Optional[str] = None,
|
|
34
38
|
) -> ResponseType[models.CreateTweetResponse]:
|
|
35
|
-
variables =
|
|
36
|
-
|
|
39
|
+
variables = non_nullable(
|
|
40
|
+
twitter.PostCreateTweetRequestVariables.from_dict(
|
|
41
|
+
self.flag["CreateTweet"]["variables"]
|
|
42
|
+
)
|
|
37
43
|
)
|
|
38
|
-
features =
|
|
39
|
-
|
|
44
|
+
features = non_nullable(
|
|
45
|
+
twitter.PostCreateTweetRequestFeatures.from_dict(
|
|
46
|
+
self.flag["CreateTweet"]["features"]
|
|
47
|
+
)
|
|
40
48
|
)
|
|
41
49
|
variables.tweet_text = tweet_text
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
50
|
+
if media_ids:
|
|
51
|
+
tagged_or = tagged_users or []
|
|
52
|
+
variables.media.media_entities = [
|
|
53
|
+
twitter.PostCreateTweetRequestVariablesMediaMediaEntitiesInner(
|
|
54
|
+
media_id=media_id,
|
|
55
|
+
tagged_users=tagged_or[idx] if len(tagged_or) > idx else [],
|
|
56
|
+
)
|
|
57
|
+
for idx, media_id in enumerate(media_ids)
|
|
58
|
+
]
|
|
59
|
+
variables.attachment_url = attachment_url
|
|
60
|
+
if conversation_control:
|
|
61
|
+
variables.conversation_control = (
|
|
62
|
+
twitter.PostCreateTweetRequestVariablesConversationControl(
|
|
63
|
+
mode=conversation_control
|
|
64
|
+
)
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
if in_reply_to_tweet_id:
|
|
68
|
+
variables.reply = twitter.PostCreateTweetRequestVariablesReply(
|
|
69
|
+
exclude_reply_user_ids=[],
|
|
70
|
+
in_reply_to_tweet_id=in_reply_to_tweet_id,
|
|
46
71
|
)
|
|
47
|
-
for media_id in media_ids or []
|
|
48
|
-
]
|
|
49
72
|
|
|
50
73
|
res = self.api.post_create_tweet_with_http_info(
|
|
51
74
|
path_query_id=self.flag["CreateTweet"]["queryId"],
|
|
@@ -62,8 +85,10 @@ class PostApiUtils:
|
|
|
62
85
|
self,
|
|
63
86
|
tweet_id: str,
|
|
64
87
|
) -> ResponseType[models.DeleteTweetResponse]:
|
|
65
|
-
variables =
|
|
66
|
-
|
|
88
|
+
variables = non_nullable(
|
|
89
|
+
twitter.PostCreateRetweetRequestVariables.from_dict(
|
|
90
|
+
self.flag["DeleteTweet"]["variables"]
|
|
91
|
+
)
|
|
67
92
|
)
|
|
68
93
|
variables.tweet_id = tweet_id
|
|
69
94
|
|
|
@@ -81,8 +106,10 @@ class PostApiUtils:
|
|
|
81
106
|
self,
|
|
82
107
|
tweet_id: str,
|
|
83
108
|
) -> ResponseType[models.CreateRetweetResponse]:
|
|
84
|
-
variables =
|
|
85
|
-
|
|
109
|
+
variables = non_nullable(
|
|
110
|
+
twitter.PostCreateRetweetRequestVariables.from_dict(
|
|
111
|
+
self.flag["CreateRetweet"]["variables"]
|
|
112
|
+
)
|
|
86
113
|
)
|
|
87
114
|
variables.tweet_id = tweet_id
|
|
88
115
|
|
|
@@ -100,8 +127,10 @@ class PostApiUtils:
|
|
|
100
127
|
self,
|
|
101
128
|
source_tweet_id: str,
|
|
102
129
|
) -> ResponseType[models.DeleteRetweetResponse]:
|
|
103
|
-
variables =
|
|
104
|
-
|
|
130
|
+
variables = non_nullable(
|
|
131
|
+
twitter.PostDeleteRetweetRequestVariables.from_dict(
|
|
132
|
+
self.flag["DeleteRetweet"]["variables"]
|
|
133
|
+
)
|
|
105
134
|
)
|
|
106
135
|
variables.source_tweet_id = source_tweet_id
|
|
107
136
|
|
|
@@ -120,8 +149,10 @@ class PostApiUtils:
|
|
|
120
149
|
self,
|
|
121
150
|
tweet_id: str,
|
|
122
151
|
) -> ResponseType[models.FavoriteTweetResponseData]:
|
|
123
|
-
variables =
|
|
124
|
-
|
|
152
|
+
variables = non_nullable(
|
|
153
|
+
twitter.PostCreateBookmarkRequestVariables.from_dict(
|
|
154
|
+
self.flag["FavoriteTweet"]["variables"]
|
|
155
|
+
)
|
|
125
156
|
)
|
|
126
157
|
variables.tweet_id = tweet_id
|
|
127
158
|
|
|
@@ -139,8 +170,10 @@ class PostApiUtils:
|
|
|
139
170
|
self,
|
|
140
171
|
tweet_id: str,
|
|
141
172
|
) -> ResponseType[models.UnfavoriteTweetResponseData]:
|
|
142
|
-
variables =
|
|
143
|
-
|
|
173
|
+
variables = non_nullable(
|
|
174
|
+
twitter.PostCreateRetweetRequestVariables.from_dict(
|
|
175
|
+
self.flag["UnfavoriteTweet"]["variables"]
|
|
176
|
+
)
|
|
144
177
|
)
|
|
145
178
|
variables.tweet_id = tweet_id
|
|
146
179
|
|
|
@@ -17,6 +17,7 @@ from twitter_openapi_python.utils import (
|
|
|
17
17
|
instruction_to_entry,
|
|
18
18
|
tweet_entries_converter,
|
|
19
19
|
)
|
|
20
|
+
from twitter_openapi_python.utils.api import non_nullable
|
|
20
21
|
|
|
21
22
|
T = TypeVar("T")
|
|
22
23
|
ResponseType = TwitterApiUtilsResponse[TimelineApiUtilsResponse[TweetApiUtilsData]]
|
|
@@ -199,7 +200,9 @@ class TweetApiUtils:
|
|
|
199
200
|
|
|
200
201
|
response = self.request(
|
|
201
202
|
apiFn=self.api.get_user_tweets_with_http_info,
|
|
202
|
-
convertFn=lambda e:
|
|
203
|
+
convertFn=lambda e: non_nullable(
|
|
204
|
+
e.data.user.result.timeline_v2.timeline
|
|
205
|
+
).instructions,
|
|
203
206
|
type=models.UserTweetsResponse,
|
|
204
207
|
key="UserTweets",
|
|
205
208
|
param=param,
|
|
@@ -223,7 +226,9 @@ class TweetApiUtils:
|
|
|
223
226
|
|
|
224
227
|
response = self.request(
|
|
225
228
|
apiFn=self.api.get_user_tweets_and_replies_with_http_info,
|
|
226
|
-
convertFn=lambda e:
|
|
229
|
+
convertFn=lambda e: non_nullable(
|
|
230
|
+
e.data.user.result.timeline_v2.timeline
|
|
231
|
+
).instructions,
|
|
227
232
|
type=models.UserTweetsResponse,
|
|
228
233
|
key="UserTweetsAndReplies",
|
|
229
234
|
param=param,
|
|
@@ -247,7 +252,9 @@ class TweetApiUtils:
|
|
|
247
252
|
|
|
248
253
|
response = self.request(
|
|
249
254
|
apiFn=self.api.get_user_media_with_http_info,
|
|
250
|
-
convertFn=lambda e:
|
|
255
|
+
convertFn=lambda e: non_nullable(
|
|
256
|
+
e.data.user.result.timeline_v2.timeline
|
|
257
|
+
).instructions,
|
|
251
258
|
type=models.UserTweetsResponse,
|
|
252
259
|
key="UserMedia",
|
|
253
260
|
param=param,
|
|
@@ -271,7 +278,9 @@ class TweetApiUtils:
|
|
|
271
278
|
|
|
272
279
|
response = self.request(
|
|
273
280
|
apiFn=self.api.get_likes_with_http_info,
|
|
274
|
-
convertFn=lambda e:
|
|
281
|
+
convertFn=lambda e: non_nullable(
|
|
282
|
+
e.data.user.result.timeline_v2.timeline
|
|
283
|
+
).instructions,
|
|
275
284
|
type=models.UserTweetsResponse,
|
|
276
285
|
key="Likes",
|
|
277
286
|
param=param,
|
|
@@ -15,6 +15,7 @@ from twitter_openapi_python.utils import (
|
|
|
15
15
|
entries_cursor,
|
|
16
16
|
get_kwargs,
|
|
17
17
|
instruction_to_entry,
|
|
18
|
+
non_nullable,
|
|
18
19
|
user_entries_converter,
|
|
19
20
|
user_result_converter,
|
|
20
21
|
)
|
|
@@ -144,7 +145,9 @@ class UserListApiUtils:
|
|
|
144
145
|
param.update(extra_param)
|
|
145
146
|
return self.request(
|
|
146
147
|
apiFn=self.api.get_favoriters_with_http_info,
|
|
147
|
-
convertFn=lambda e:
|
|
148
|
+
convertFn=lambda e: non_nullable(
|
|
149
|
+
e.data.favoriters_timeline.timeline
|
|
150
|
+
).instructions,
|
|
148
151
|
type=models.TweetFavoritersResponse,
|
|
149
152
|
key="Favoriters",
|
|
150
153
|
param=param,
|
|
@@ -166,7 +169,9 @@ class UserListApiUtils:
|
|
|
166
169
|
param.update(extra_param)
|
|
167
170
|
return self.request(
|
|
168
171
|
apiFn=self.api.get_retweeters_with_http_info,
|
|
169
|
-
convertFn=lambda e:
|
|
172
|
+
convertFn=lambda e: non_nullable(
|
|
173
|
+
e.data.retweeters_timeline.timeline
|
|
174
|
+
).instructions,
|
|
170
175
|
type=models.TweetRetweetersResponse,
|
|
171
176
|
key="Retweeters",
|
|
172
177
|
param=param,
|
twitter_openapi_python/client.py
CHANGED
|
@@ -58,43 +58,54 @@ class TwitterOpenapiPythonClient:
|
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
class TwitterOpenapiPython:
|
|
61
|
-
hash: str = "
|
|
61
|
+
hash: str = "0c64eebbfb93b3ed69c3aba923ec8d6894a39902"
|
|
62
62
|
placeholder_url = "https://raw.githubusercontent.com/fa0311/twitter-openapi/{hash}/src/config/placeholder.json"
|
|
63
|
-
|
|
64
|
-
user_agent: str = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
|
|
63
|
+
header = "https://raw.githubusercontent.com/fa0311/latest-user-agent/refs/heads/main/header.json"
|
|
65
64
|
access_token: str = "AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA"
|
|
65
|
+
twitter_url: str = "https://x.com/home"
|
|
66
|
+
additional_browser_headers = {}
|
|
67
|
+
additional_api_headers = {}
|
|
68
|
+
|
|
69
|
+
def get_header(self) -> tuple[dict[str, str], dict[str, str]]:
|
|
70
|
+
http = urllib3.PoolManager()
|
|
71
|
+
res = http.request("GET", self.header)
|
|
72
|
+
data = json.loads(res.data)
|
|
73
|
+
ignore = ["host", "connection"]
|
|
66
74
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
75
|
+
def getHader(name: str) -> dict[str, str]:
|
|
76
|
+
return {
|
|
77
|
+
key: value for key, value in data[name].items() if key not in ignore
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return (
|
|
81
|
+
{
|
|
82
|
+
**getHader("chrome-fetch"),
|
|
83
|
+
"accept-encoding": "identity",
|
|
84
|
+
"pragma": "no-cache",
|
|
85
|
+
"referer": self.twitter_url,
|
|
86
|
+
"priority": "u=1, i",
|
|
87
|
+
"x-twitter-client-language": "en",
|
|
88
|
+
"x-twitter-active-user": "yes",
|
|
89
|
+
# 'x-twitter-auth-type': 'xxxx'
|
|
90
|
+
# 'x-csrf-token': 'xxxx',
|
|
91
|
+
# 'x-guest-token': 'xxxx',
|
|
92
|
+
"authorization": f"Bearer {self.access_token}",
|
|
93
|
+
**self.additional_api_headers,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
**getHader("chrome"),
|
|
97
|
+
**self.additional_browser_headers,
|
|
98
|
+
},
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
def kebab_to_upper_camel(self, text: dict[str, Any]) -> dict[str, Any]:
|
|
102
|
+
res = {}
|
|
103
|
+
for key, value in text.items():
|
|
104
|
+
new_key = "".join(
|
|
105
|
+
[x.capitalize() for x in key.replace("x-twitter-", "").split("-")]
|
|
106
|
+
)
|
|
107
|
+
res[new_key] = value
|
|
108
|
+
return res
|
|
98
109
|
|
|
99
110
|
def cookie_normalize(self, cookie: list[str]) -> dict[str, str]:
|
|
100
111
|
return {
|
|
@@ -117,7 +128,7 @@ class TwitterOpenapiPython:
|
|
|
117
128
|
self,
|
|
118
129
|
cookies: dict[str, str],
|
|
119
130
|
) -> TwitterOpenapiPythonClient:
|
|
120
|
-
api_key = self.
|
|
131
|
+
api_key = self.kebab_to_upper_camel(self.get_header()[0])
|
|
121
132
|
|
|
122
133
|
if cookies.get("ct0"):
|
|
123
134
|
api_key.update({"AuthType": "OAuth2Session"})
|
|
@@ -132,27 +143,28 @@ class TwitterOpenapiPython:
|
|
|
132
143
|
configuration=api_conf,
|
|
133
144
|
cookie=self.cookie_to_str(cookies),
|
|
134
145
|
)
|
|
135
|
-
api_client.user_agent =
|
|
146
|
+
api_client.user_agent = api_key["UserAgent"]
|
|
136
147
|
return self.get_twitter_openapi_python_client(api_client)
|
|
137
148
|
|
|
138
149
|
def get_guest_client(self) -> TwitterOpenapiPythonClient:
|
|
139
150
|
http = urllib3.PoolManager()
|
|
140
151
|
session = {}
|
|
141
152
|
|
|
153
|
+
header = self.get_header()
|
|
154
|
+
|
|
142
155
|
res_1 = http.request(
|
|
143
156
|
"GET",
|
|
144
|
-
|
|
157
|
+
self.twitter_url,
|
|
145
158
|
redirect=False,
|
|
146
|
-
headers=
|
|
159
|
+
headers=header[1],
|
|
147
160
|
)
|
|
148
161
|
cookie = res_1.headers._container["set-cookie"][1:]
|
|
149
162
|
session.update(self.cookie_normalize(cookie))
|
|
150
163
|
res_2 = http.request(
|
|
151
164
|
"GET",
|
|
152
|
-
|
|
165
|
+
self.twitter_url,
|
|
153
166
|
redirect=False,
|
|
154
|
-
headers=
|
|
155
|
-
| {"Cookie": self.cookie_to_str(session)},
|
|
167
|
+
headers=header[1],
|
|
156
168
|
)
|
|
157
169
|
|
|
158
170
|
find = re.findall(r'document.cookie="(.*?)";', res_2.data.decode())
|
|
@@ -161,15 +173,13 @@ class TwitterOpenapiPython:
|
|
|
161
173
|
session.pop("ct0")
|
|
162
174
|
|
|
163
175
|
if not session.get("gt"):
|
|
164
|
-
activate_header =
|
|
165
|
-
"
|
|
166
|
-
"x-twitter-active-user": "yes",
|
|
167
|
-
"x-twitter-client-language": "en",
|
|
176
|
+
activate_header = header[0] | {
|
|
177
|
+
"cookie": self.cookie_to_str(session),
|
|
168
178
|
}
|
|
169
179
|
res_3 = http.request(
|
|
170
180
|
"POST",
|
|
171
|
-
"https://api.
|
|
172
|
-
headers=activate_header
|
|
181
|
+
"https://api.x.com/1.1/guest/activate.json",
|
|
182
|
+
headers=activate_header,
|
|
173
183
|
)
|
|
174
184
|
gt = json.loads(res_3.data.decode())["guest_token"]
|
|
175
185
|
session.update({"gt": gt})
|
|
@@ -23,6 +23,11 @@ def flat(matrix: List[List[T]]) -> List[T]:
|
|
|
23
23
|
return [x for row in matrix for x in row]
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
def non_nullable(x: Optional[T]) -> T:
|
|
27
|
+
if x is None:
|
|
28
|
+
raise Exception("No data")
|
|
29
|
+
return x
|
|
30
|
+
|
|
26
31
|
def non_nullable_list(x: List[Optional[T]]) -> List[T]:
|
|
27
32
|
def filter_fn(x: Optional[T]) -> TypeGuard[T]:
|
|
28
33
|
return x is not None
|
{twitter_openapi_python-0.0.22.dist-info → twitter_openapi_python-0.0.24.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: twitter-openapi-python
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.24
|
|
4
4
|
Summary: Twitter OpenAPI
|
|
5
5
|
Home-page: https://github.com/fa0311/twitter_openapi_python
|
|
6
6
|
Author: fa0311
|
|
@@ -10,7 +10,7 @@ Keywords: OpenAPI,OpenAPI-Generator,Twitter OpenAPI
|
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
11
11
|
License-File: LICENSE
|
|
12
12
|
License-File: LICENSE.AGPL
|
|
13
|
-
Requires-Dist: twitter-openapi-python-generated ==0.0.
|
|
13
|
+
Requires-Dist: twitter-openapi-python-generated ==0.0.21
|
|
14
14
|
Requires-Dist: pydantic >=2.6
|
|
15
15
|
|
|
16
16
|
Twitter scraping with data validation by pydantic.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
twitter_openapi_python/__init__.py,sha256=stqYIfWDqM0yC93SQNp4-b2hSz-ONWR3QxOG5g2oREg,339
|
|
2
|
-
twitter_openapi_python/client.py,sha256=
|
|
2
|
+
twitter_openapi_python/client.py,sha256=i0ynE5orodZtPCLGUYmalBD7lL4HMBBItypdUmlJYJg,6673
|
|
3
3
|
twitter_openapi_python/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
twitter_openapi_python/api/__init__.py,sha256=-2hoS75Fp0KvCIWKYQFpvAl0pcbFyt7Be3ood08P7n8,643
|
|
5
5
|
twitter_openapi_python/api/default_api.py,sha256=PeHYaAw6xaUB9ZE3An5SKcEvW71JLTFSgyte80BBvX4,2751
|
|
6
|
-
twitter_openapi_python/api/initial_state_api.py,sha256=
|
|
7
|
-
twitter_openapi_python/api/post_api.py,sha256=
|
|
8
|
-
twitter_openapi_python/api/tweet_api.py,sha256=
|
|
6
|
+
twitter_openapi_python/api/initial_state_api.py,sha256=N4yA3oXDbke7bH-XOuKQ4WVUm5sKbC2C3Dd3AvFINLY,2355
|
|
7
|
+
twitter_openapi_python/api/post_api.py,sha256=9xvA0LrtcxWOVBkkVwvMS-zBcJFh1ZVUF_dm1zzZq5o,6826
|
|
8
|
+
twitter_openapi_python/api/tweet_api.py,sha256=iZC3PlFS9SD3olb4BRrMYfyoCUf1UuD2XToXd33S-UM,10184
|
|
9
9
|
twitter_openapi_python/api/user_api.py,sha256=oH5JBNemBSCyUFAbDSDbjRUOZN3bZMa_tI8PQ4C1wYk,2619
|
|
10
|
-
twitter_openapi_python/api/user_list_api.py,sha256=
|
|
10
|
+
twitter_openapi_python/api/user_list_api.py,sha256=7o1dqRrXzk0F6ywQ-dhyMR0eCzsGJ6HeUHYswPDx3hI,5748
|
|
11
11
|
twitter_openapi_python/api/users_api.py,sha256=82CM20-dp7JfpTRqSIzU5Lbm4xoB32Cq18ECRfVMt_I,1789
|
|
12
12
|
twitter_openapi_python/api/v11_get_api.py,sha256=OimuRRA4oG2z6IGhJuzgo2CvJqpoD4-CDNZrwZRg6GQ,2254
|
|
13
13
|
twitter_openapi_python/api/v11_post_api.py,sha256=d7H-ewGhLql-lQagkGLdOm9FybtjN05lCoGatDMh9rc,2051
|
|
@@ -17,11 +17,11 @@ twitter_openapi_python/models/header.py,sha256=hP0fjrm-3Mogt9IkAucQnmDletRuzMmCf
|
|
|
17
17
|
twitter_openapi_python/models/initial_state.py,sha256=h8P3hC_tLVSmDuYxB03fuSviz22cpp-4RfSR2npP_Yo,530
|
|
18
18
|
twitter_openapi_python/models/response.py,sha256=ZuaX36mKRsVx5aiJhNw3CjrvVGVaGjMCGdXy28PMFy8,480
|
|
19
19
|
twitter_openapi_python/models/timeline.py,sha256=AoWfrJsonYImlweciaUSjFzmeciaX0zshi7d-FkT4LM,1392
|
|
20
|
-
twitter_openapi_python/utils/__init__.py,sha256=
|
|
21
|
-
twitter_openapi_python/utils/api.py,sha256=
|
|
22
|
-
twitter_openapi_python-0.0.
|
|
23
|
-
twitter_openapi_python-0.0.
|
|
24
|
-
twitter_openapi_python-0.0.
|
|
25
|
-
twitter_openapi_python-0.0.
|
|
26
|
-
twitter_openapi_python-0.0.
|
|
27
|
-
twitter_openapi_python-0.0.
|
|
20
|
+
twitter_openapi_python/utils/__init__.py,sha256=QVT1eCClP9EVfcZ4QU96TVegfAUDEtJ-PVp3zv6qy6w,449
|
|
21
|
+
twitter_openapi_python/utils/api.py,sha256=JTSXE1Wh3AiuOb_APTDTQMrR4HTkI9AihzrXkJGV2d8,10026
|
|
22
|
+
twitter_openapi_python-0.0.24.dist-info/LICENSE,sha256=xthyYzrtSmRlBu2gnfuIxzsZeHrqtIZgZPL9UPrYiQU,1524
|
|
23
|
+
twitter_openapi_python-0.0.24.dist-info/LICENSE.AGPL,sha256=Nv6u1ubULm-E2y6q2-pQPK8s2BzkOltLaVlPKQ3tkcs,35182
|
|
24
|
+
twitter_openapi_python-0.0.24.dist-info/METADATA,sha256=gAfBFLyf8j_Nb0LtsAPTmWrRdaG62cbE7WdveewWmsU,551
|
|
25
|
+
twitter_openapi_python-0.0.24.dist-info/WHEEL,sha256=Xo9-1PvkuimrydujYJAjF7pCkriuXBpUPEjma1nZyJ0,92
|
|
26
|
+
twitter_openapi_python-0.0.24.dist-info/top_level.txt,sha256=wKFCnW_S6aWD3nFPmd65SxZIviiqQ30LqHOLLpcnTdE,23
|
|
27
|
+
twitter_openapi_python-0.0.24.dist-info/RECORD,,
|
|
File without changes
|
{twitter_openapi_python-0.0.22.dist-info → twitter_openapi_python-0.0.24.dist-info}/LICENSE.AGPL
RENAMED
|
File without changes
|
|
File without changes
|
{twitter_openapi_python-0.0.22.dist-info → twitter_openapi_python-0.0.24.dist-info}/top_level.txt
RENAMED
|
File without changes
|