diff --git a/test_api.py b/test_api.py index f0f3fb2..ca03706 100644 --- a/test_api.py +++ b/test_api.py @@ -59,4 +59,11 @@ def test_api_user_feed(): jData = resp.get_json() assert resp.status_code==200 assert jData["screen_name"]=="jack" - assert len(jData["latest_tweets"])>0 \ No newline at end of file + assert len(jData["latest_tweets"])>0 + +def test_api_retweet(): + resp = client.get(testRetweetTweet.replace("https://twitter.com","https://api.vxtwitter.com"),headers={"User-Agent":"test"}) + jData = resp.get_json() + assert jData['retweetURL'] == 'https://twitter.com/i/status/1828569456231993456' + assert jData['retweet'] != None + assert jData['retweet']['text'].startswith("If you want to try") \ No newline at end of file diff --git a/testgen.py b/testgen.py index 1520fd0..473eafb 100644 --- a/testgen.py +++ b/testgen.py @@ -12,6 +12,7 @@ tests = { "testPollTweet": "https://twitter.com/norm/status/651169346518056960", "testMixedMediaTweet":"https://twitter.com/bigbeerfest/status/1760638922084741177", "testVinePlayerTweet":"https://twitter.com/Roblox/status/583302104342638592", + "testRetweetTweet":"https://twitter.com/pdxdylan/status/1828570470222045294", } def getVNFFromLink(link): diff --git a/twitfix.py b/twitfix.py index a9749af..5e46270 100644 --- a/twitfix.py +++ b/twitfix.py @@ -359,6 +359,12 @@ def twitfix(sub_path): if 'qrtURL' in tweetData and tweetData['qrtURL'] is not None: qrt = getTweetData(tweetData['qrtURL']) tweetData['qrt'] = qrt + + retweet = None + if 'retweetURL' in tweetData and tweetData['retweetURL'] is not None: + retweet = getTweetData(tweetData['retweetURL']) + tweetData['retweet'] = retweet + tweetData = deepcopy(tweetData) log.success("Tweet Data Get success") if '?' in request.url: @@ -473,6 +479,12 @@ def api_v1_status(tweet_id): if 'qrtURL' in tweetData and tweetData['qrtURL'] is not None: qrt = getTweetData(tweetData['qrtURL']) tweetData['qrt'] = qrt + + retweet = None + if 'retweetURL' in tweetData and tweetData['retweetURL'] is not None: + retweet = getTweetData(tweetData['retweetURL']) + tweetData['retweet'] = retweet + if tweetData is None: abort(500) # this should cause Discord to fall back to the default embed return activitymg.tweetDataToActivity(tweetData,embedIndex) diff --git a/vxApi.py b/vxApi.py index d2b509f..2c53cb9 100644 --- a/vxApi.py +++ b/vxApi.py @@ -144,6 +144,10 @@ def getApiResponse(tweet,include_txt=False,include_rtf=False): if 'quoted_status_id_str' in tweetL: qrtURL = "https://twitter.com/i/status/" + tweetL['quoted_status_id_str'] + retweetURL = None + if 'retweeted_status_result' in tweetL: + retweetURL = "https://twitter.com/i/status/" + tweetL['retweeted_status_result']['result']['rest_id'] + if 'possibly_sensitive' not in tweetL: tweetL['possibly_sensitive'] = False @@ -253,6 +257,7 @@ def getApiResponse(tweet,include_txt=False,include_rtf=False): "replyingTo": replyingTo, "replyingToID": replyingToID, "fetched_on": int(datetime.now().timestamp()), + "retweetURL":retweetURL, } try: apiObject["date_epoch"] = int(datetime.strptime(tweetL["created_at"], "%a %b %d %H:%M:%S %z %Y").timestamp()) diff --git a/vx_testdata.py b/vx_testdata.py index 7b7b506..a9a0e15 100644 --- a/vx_testdata.py +++ b/vx_testdata.py @@ -12,6 +12,7 @@ testNSFWTweet="https://twitter.com/kuyacoy/status/1581185279376838657" testPollTweet="https://twitter.com/norm/status/651169346518056960" testMixedMediaTweet="https://twitter.com/bigbeerfest/status/1760638922084741177" testVinePlayerTweet="https://twitter.com/Roblox/status/583302104342638592" +testRetweetTweet="https://twitter.com/pdxdylan/status/1828570470222045294" testTextTweet_compare={'text': 'just setting up my twttr', 'date': 'Tue Mar 21 20:50:14 +0000 2006', 'tweetURL': 'https://twitter.com/jack/status/20', 'tweetID': '20', 'conversationID': '20', 'mediaURLs': [], 'media_extended': [], 'possibly_sensitive': False, 'hashtags': [], 'qrtURL': None, 'allSameType': True, 'hasMedia': False, 'combinedMediaUrl': None, 'pollData': None, 'article': None, 'date_epoch': 1142974214} testVideoTweet_compare={'text': 'TikTok embeds on Discord/Telegram bait you with a fake play button, but to see the actual video you have to go to their website.\nAs a request from a friend, I made it so that if you add "vx" before "tiktok" on any link, it fixes that. https://t.co/QYpiVXUIrW', 'date': 'Fri Jun 24 18:17:31 +0000 2022', 'tweetURL': 'https://twitter.com/pdxdylan/status/1540398733669666818', 'tweetID': '1540398733669666818', 'conversationID': '1540398733669666818', 'mediaURLs': ['https://video.twimg.com/ext_tw_video/1540396699037929472/pu/vid/762x528/YxbXbT3X7vq4LWfC.mp4'], 'media_extended': [{'url': 'https://video.twimg.com/ext_tw_video/1540396699037929472/pu/vid/762x528/YxbXbT3X7vq4LWfC.mp4', 'type': 'video', 'size': {'width': 762, 'height': 528}, 'duration_millis': 13650, 'thumbnail_url': 'https://pbs.twimg.com/ext_tw_video_thumb/1540396699037929472/pu/img/l187Z6B9AHHxUKPV.jpg', 'altText': None}], 'possibly_sensitive': False, 'hashtags': [], 'qrtURL': None, 'allSameType': True, 'hasMedia': True, 'combinedMediaUrl': None, 'pollData': None, 'article': None, 'date_epoch': 1656094651}