tweepy-self 1.5.4__py3-none-any.whl → 1.6.0__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.
@@ -3,14 +3,14 @@ twitter/account.py,sha256=tHzBdc34pEJI2SRbjLcmKtwAzjhzUFsa4vIQqtXAc1s,3015
|
|
3
3
|
twitter/base/__init__.py,sha256=x0EHKv4q_FI6xEq2nL4V9s8P6VWr6IaHTqdH9sXB5d8,133
|
4
4
|
twitter/base/client.py,sha256=7byb0Psai-dvg_ww6Y7uyE2hV1pfTU653hFgVdRiqXo,478
|
5
5
|
twitter/base/session.py,sha256=JFPS-9Qae1iY3NfNcywxvWWmRDijaU_Rjs3WaQ00iFA,2071
|
6
|
-
twitter/client.py,sha256=
|
6
|
+
twitter/client.py,sha256=qfIQrzGb-dju2lTaKX820zGDADv8PmsS5cIhEk9p8oE,60960
|
7
7
|
twitter/enums.py,sha256=-OH6Ibxarq5qt4E2AhkProVawcEyIf5YG_h_G5xiV9Y,270
|
8
|
-
twitter/errors.py,sha256=
|
9
|
-
twitter/models.py,sha256=
|
8
|
+
twitter/errors.py,sha256=PsvGP3hps1HNWdKbUPhEkuDqLUmmqzhpAkRtVrJr5jc,5007
|
9
|
+
twitter/models.py,sha256=ttSNuhY1knTdI-Yty54OCJF5YzARc8IaA11zKNHV9p0,2063
|
10
10
|
twitter/utils/__init__.py,sha256=pyhQXwTdp0HFwV_UNF4dTyklLD9RtaefA16SrQXeNlg,589
|
11
11
|
twitter/utils/file.py,sha256=Sz2KEF9DnL04aOP1XabuMYMMF4VR8dJ_KWMEVvQ666Y,1120
|
12
12
|
twitter/utils/html.py,sha256=hVtIRFI2yRAdWEaShFNBG-_ZWxd16og8i8OVDnFy5Hc,1971
|
13
13
|
twitter/utils/other.py,sha256=UnUxS3uDR4eggbNN16xiw96VC_MNt9tOgnBlNWvRBoY,559
|
14
|
-
tweepy_self-1.
|
15
|
-
tweepy_self-1.
|
16
|
-
tweepy_self-1.
|
14
|
+
tweepy_self-1.6.0.dist-info/METADATA,sha256=v5tR7xSal8DNv3iwMStoxzc-jtLnSrHUX90pxDaN0Ik,9136
|
15
|
+
tweepy_self-1.6.0.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
16
|
+
tweepy_self-1.6.0.dist-info/RECORD,,
|
twitter/client.py
CHANGED
@@ -11,6 +11,7 @@ from python3_capsolver.fun_captcha import FunCaptcha, FunCaptchaTypeEnm
|
|
11
11
|
|
12
12
|
from .errors import (
|
13
13
|
TwitterException,
|
14
|
+
FailedToFindDuplicatePost,
|
14
15
|
HTTPException,
|
15
16
|
BadRequest,
|
16
17
|
Unauthorized,
|
@@ -24,7 +25,7 @@ from .errors import (
|
|
24
25
|
ConsentLocked,
|
25
26
|
Suspended,
|
26
27
|
)
|
27
|
-
from .utils import to_json
|
28
|
+
from .utils import to_json, tweet_url as create_tweet_url
|
28
29
|
from .base import BaseClient
|
29
30
|
from .account import Account, AccountStatus
|
30
31
|
from .models import UserData, Tweet
|
@@ -520,7 +521,7 @@ class Client(BaseClient):
|
|
520
521
|
media_id: int | str = None,
|
521
522
|
tweet_id_to_reply: str | int = None,
|
522
523
|
attachment_url: str = None,
|
523
|
-
) ->
|
524
|
+
) -> Tweet:
|
524
525
|
url, query_id = self._action_to_url("CreateTweet")
|
525
526
|
payload = {
|
526
527
|
"variables": {
|
@@ -564,32 +565,103 @@ class Client(BaseClient):
|
|
564
565
|
)
|
565
566
|
|
566
567
|
response, response_json = await self.request("POST", url, json=payload)
|
567
|
-
|
568
|
-
"
|
569
|
-
|
570
|
-
return
|
568
|
+
tweet = Tweet.from_raw_data(
|
569
|
+
response_json["data"]["create_tweet"]["tweet_results"]["result"]
|
570
|
+
)
|
571
|
+
return tweet
|
571
572
|
|
572
|
-
async def
|
573
|
-
|
574
|
-
:
|
575
|
-
|
576
|
-
|
573
|
+
async def _tweet_or_search_duplicate(
|
574
|
+
self,
|
575
|
+
text: str = None,
|
576
|
+
*,
|
577
|
+
media_id: int | str = None,
|
578
|
+
tweet_id_to_reply: str | int = None,
|
579
|
+
attachment_url: str = None,
|
580
|
+
search_duplicate: bool = True,
|
581
|
+
with_tweet_url: bool = True,
|
582
|
+
) -> Tweet:
|
583
|
+
try:
|
584
|
+
tweet = await self._tweet(
|
585
|
+
text,
|
586
|
+
media_id=media_id,
|
587
|
+
tweet_id_to_reply=tweet_id_to_reply,
|
588
|
+
attachment_url=attachment_url,
|
589
|
+
)
|
590
|
+
except HTTPException as exc:
|
591
|
+
if (
|
592
|
+
search_duplicate
|
593
|
+
and 187 in exc.api_codes # duplicate tweet (Status is a duplicate)
|
594
|
+
):
|
595
|
+
tweets = await self.request_tweets(self.account.id)
|
596
|
+
duplicate_tweet = None
|
597
|
+
for tweet_ in tweets:
|
598
|
+
if tweet_.full_text == text:
|
599
|
+
duplicate_tweet = tweet_
|
600
|
+
|
601
|
+
if not duplicate_tweet:
|
602
|
+
raise FailedToFindDuplicatePost(
|
603
|
+
f"Couldn't find a post duplicate in the next 20 posts"
|
604
|
+
)
|
605
|
+
tweet = duplicate_tweet
|
606
|
+
|
607
|
+
else:
|
608
|
+
raise
|
609
|
+
|
610
|
+
if with_tweet_url:
|
611
|
+
if not self.account.username:
|
612
|
+
await self.request_user_data()
|
613
|
+
tweet.url = create_tweet_url(self.account.username, tweet.id)
|
614
|
+
|
615
|
+
return tweet
|
616
|
+
|
617
|
+
async def tweet(
|
618
|
+
self,
|
619
|
+
text: str,
|
620
|
+
*,
|
621
|
+
media_id: int | str = None,
|
622
|
+
search_duplicate: bool = True,
|
623
|
+
with_tweet_url: bool = True,
|
624
|
+
) -> Tweet:
|
625
|
+
return await self._tweet_or_search_duplicate(
|
626
|
+
text,
|
627
|
+
media_id=media_id,
|
628
|
+
search_duplicate=search_duplicate,
|
629
|
+
with_tweet_url=with_tweet_url,
|
630
|
+
)
|
577
631
|
|
578
632
|
async def reply(
|
579
|
-
self,
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
633
|
+
self,
|
634
|
+
tweet_id: str | int,
|
635
|
+
text: str,
|
636
|
+
*,
|
637
|
+
media_id: int | str = None,
|
638
|
+
search_duplicate: bool = True,
|
639
|
+
with_tweet_url: bool = True,
|
640
|
+
) -> Tweet:
|
641
|
+
return await self._tweet_or_search_duplicate(
|
642
|
+
text,
|
643
|
+
media_id=media_id,
|
644
|
+
tweet_id_to_reply=tweet_id,
|
645
|
+
search_duplicate=search_duplicate,
|
646
|
+
with_tweet_url=with_tweet_url,
|
647
|
+
)
|
585
648
|
|
586
649
|
async def quote(
|
587
|
-
self,
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
650
|
+
self,
|
651
|
+
tweet_url: str,
|
652
|
+
text: str,
|
653
|
+
*,
|
654
|
+
media_id: int | str = None,
|
655
|
+
search_duplicate: bool = True,
|
656
|
+
with_tweet_url: bool = True,
|
657
|
+
) -> Tweet:
|
658
|
+
return await self._tweet_or_search_duplicate(
|
659
|
+
text,
|
660
|
+
media_id=media_id,
|
661
|
+
attachment_url=tweet_url,
|
662
|
+
search_duplicate=search_duplicate,
|
663
|
+
with_tweet_url=with_tweet_url,
|
664
|
+
)
|
593
665
|
|
594
666
|
async def vote(
|
595
667
|
self, tweet_id: int | str, card_id: int | str, choice_number: int
|
twitter/errors.py
CHANGED
@@ -4,6 +4,7 @@ from .account import Account
|
|
4
4
|
|
5
5
|
__all__ = [
|
6
6
|
"TwitterException",
|
7
|
+
"FailedToFindDuplicatePost",
|
7
8
|
"HTTPException",
|
8
9
|
"BadRequest",
|
9
10
|
"Unauthorized",
|
@@ -23,6 +24,10 @@ class TwitterException(Exception):
|
|
23
24
|
pass
|
24
25
|
|
25
26
|
|
27
|
+
class FailedToFindDuplicatePost(TwitterException):
|
28
|
+
pass
|
29
|
+
|
30
|
+
|
26
31
|
def _http_exception_message(
|
27
32
|
response: requests.Response,
|
28
33
|
api_errors: list[dict],
|
twitter/models.py
CHANGED
File without changes
|