Use unofficial API when official API fails
This commit is contained in:
parent
e64dee9349
commit
174a20d896
2 changed files with 42 additions and 4 deletions
18
twExtract.py
Normal file
18
twExtract.py
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
import imp
|
||||||
|
import yt_dlp
|
||||||
|
from yt_dlp.extractor import twitter
|
||||||
|
import json
|
||||||
|
|
||||||
|
def extractStatus(url):
|
||||||
|
twIE = twitter.TwitterIE()
|
||||||
|
twIE.set_downloader(yt_dlp.YoutubeDL())
|
||||||
|
twid = twIE._match_id(url)
|
||||||
|
status = twIE._call_api(
|
||||||
|
'statuses/show/%s.json' % twid, twid, {
|
||||||
|
'cards_platform': 'Web-12',
|
||||||
|
'include_cards': 1,
|
||||||
|
'include_reply_count': 1,
|
||||||
|
'include_user_entities': 0,
|
||||||
|
'tweet_mode': 'extended',
|
||||||
|
})
|
||||||
|
return status
|
28
twitfix.py
28
twitfix.py
|
@ -15,6 +15,7 @@ import combineImg
|
||||||
from datetime import date,datetime, timedelta
|
from datetime import date,datetime, timedelta
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
import msgs
|
import msgs
|
||||||
|
import twExtract
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
CORS(app)
|
CORS(app)
|
||||||
|
@ -317,12 +318,14 @@ def tweetInfo(url, tweet="", desc="", thumb="", uploader="", screen_name="", pfp
|
||||||
}
|
}
|
||||||
return vnf
|
return vnf
|
||||||
|
|
||||||
def link_to_vnf_from_api(video_link):
|
def get_tweet_data_from_api(video_link):
|
||||||
print(" ➤ [ + ] Attempting to download tweet info from Twitter API")
|
print(" ➤ [ + ] Attempting to download tweet info from Twitter API")
|
||||||
twid = int(re.sub(r'\?.*$','',video_link.rsplit("/", 1)[-1])) # gets the tweet ID as a int from the passed url
|
twid = int(re.sub(r'\?.*$','',video_link.rsplit("/", 1)[-1])) # gets the tweet ID as a int from the passed url
|
||||||
tweet = twitter_api.statuses.show(_id=twid, tweet_mode="extended")
|
tweet = twitter_api.statuses.show(_id=twid, tweet_mode="extended")
|
||||||
# For when I need to poke around and see what a tweet looks like
|
#print(tweet) # For when I need to poke around and see what a tweet looks like
|
||||||
#print(tweet)
|
return tweet
|
||||||
|
|
||||||
|
def link_to_vnf_from_tweet_data(tweet,video_link):
|
||||||
imgs = ["","","","", ""]
|
imgs = ["","","","", ""]
|
||||||
print(" ➤ [ + ] Tweet Type: " + tweetType(tweet))
|
print(" ➤ [ + ] Tweet Type: " + tweetType(tweet))
|
||||||
# Check to see if tweet has a video, if not, make the url passed to the VNF the first t.co link in the tweet
|
# Check to see if tweet has a video, if not, make the url passed to the VNF the first t.co link in the tweet
|
||||||
|
@ -382,6 +385,17 @@ def link_to_vnf_from_api(video_link):
|
||||||
|
|
||||||
return vnf
|
return vnf
|
||||||
|
|
||||||
|
|
||||||
|
def link_to_vnf_from_unofficial_api(video_link):
|
||||||
|
print(" ➤ [ + ] Attempting to download tweet info from UNOFFICIAL Twitter API")
|
||||||
|
tweet = twExtract.extractStatus(video_link)
|
||||||
|
return link_to_vnf_from_tweet_data(tweet,video_link)
|
||||||
|
|
||||||
|
|
||||||
|
def link_to_vnf_from_api(video_link):
|
||||||
|
tweet = get_tweet_data_from_api(video_link)
|
||||||
|
return link_to_vnf_from_tweet_data(tweet,video_link)
|
||||||
|
|
||||||
def link_to_vnf_from_youtubedl(video_link):
|
def link_to_vnf_from_youtubedl(video_link):
|
||||||
print(" ➤ [ X ] Attempting to download tweet info via YoutubeDL: " + video_link)
|
print(" ➤ [ X ] Attempting to download tweet info via YoutubeDL: " + video_link)
|
||||||
with yt_dlp.YoutubeDL({'outtmpl': '%(id)s.%(ext)s'}) as ydl:
|
with yt_dlp.YoutubeDL({'outtmpl': '%(id)s.%(ext)s'}) as ydl:
|
||||||
|
@ -396,7 +410,13 @@ def link_to_vnf(video_link): # Return a VideoInfo object or die trying
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(" ➤ [ !!! ] API Failed")
|
print(" ➤ [ !!! ] API Failed")
|
||||||
print(e)
|
print(e)
|
||||||
return link_to_vnf_from_youtubedl(video_link)
|
try:
|
||||||
|
return link_to_vnf_from_unofficial_api(video_link)
|
||||||
|
except Exception as e:
|
||||||
|
print(" ➤ [ !!! ] UNOFFICIAL API Failed")
|
||||||
|
print(e)
|
||||||
|
return link_to_vnf_from_youtubedl(video_link) # This is the last resort, will only work for videos
|
||||||
|
|
||||||
elif config['config']['method'] == 'api':
|
elif config['config']['method'] == 'api':
|
||||||
try:
|
try:
|
||||||
return link_to_vnf_from_api(video_link)
|
return link_to_vnf_from_api(video_link)
|
||||||
|
|
Loading…
Reference in a new issue