2021-07-04 03:46:02 +02:00
from flask import Flask , render_template
2021-07-04 01:52:30 +02:00
import youtube_dl
2021-07-04 11:40:22 +02:00
import json
2021-07-04 03:41:47 +02:00
import re
2021-07-04 01:52:30 +02:00
app = Flask ( __name__ )
2021-07-04 03:41:47 +02:00
pathregex = re . compile ( " \\ w { 1,15} \\ /status \\ / \\ d {19} " )
2021-07-04 01:52:30 +02:00
2021-07-04 11:40:22 +02:00
link_cache = { }
f = open ( ' links.json ' , )
link_cache = json . load ( f )
f . close ( )
2021-07-04 02:08:19 +02:00
@app.route ( ' /<path:subpath> ' )
2021-07-04 01:52:30 +02:00
def twitfix ( subpath ) :
2021-07-04 03:41:47 +02:00
match = pathregex . search ( subpath )
if match is not None :
twitter_url = subpath
if match . start ( ) == 0 :
twitter_url = " https://twitter.com/ " + subpath
2021-07-04 11:40:22 +02:00
if twitter_url in link_cache :
print ( " Link located in cache " )
return render_template ( ' index.html ' , vidurl = link_cache [ twitter_url ] [ ' url ' ] , tweet = link_cache [ twitter_url ] [ ' description ' ] , pic = link_cache [ twitter_url ] [ ' thumbnail ' ] , user = link_cache [ twitter_url ] [ ' uploader ' ] , tweeturl = twitter_url )
else :
2021-07-04 23:52:38 +02:00
with youtube_dl . YoutubeDL ( { ' outtmpl ' : ' %(id)s . %(ext)s ' } ) as ydl :
2021-07-04 11:40:22 +02:00
try :
print ( " Link not in cache, downloading and adding details to cache file " )
result = ydl . extract_info ( twitter_url , download = False )
link_cache [ twitter_url ] = {
" url " : result [ ' url ' ] ,
" description " : result [ ' description ' ] ,
" thumbnail " : result [ ' thumbnail ' ] ,
" uploader " : result [ ' uploader ' ]
}
with open ( " links.json " , " w " ) as outfile :
json . dump ( link_cache , outfile , indent = 4 , sort_keys = True )
except Exception : # Just to keep from 500s that are messy
print ( Exception )
2021-07-04 12:08:36 +02:00
return render_template ( ' default.html ' , message = " Failed to scan your twitter link! ( there is a chance I ran out of api calls.. wait a bit and try again ) " )
2021-07-04 11:40:22 +02:00
return render_template ( ' index.html ' , vidurl = result [ ' url ' ] , tweet = result [ ' description ' ] , pic = result [ ' thumbnail ' ] , user = result [ ' uploader ' ] , tweeturl = twitter_url )
2021-07-04 01:52:30 +02:00
else :
2021-07-04 11:40:22 +02:00
print ( " Link invalid " )
2021-07-04 12:08:36 +02:00
return render_template ( ' default.html ' , message = " Please use a twitter link! " )
2021-07-04 01:52:30 +02:00
@app.route ( ' /info/<path:subpath> ' )
def info ( subpath ) :
with ydl :
result = ydl . extract_info ( subpath , download = False )
return result
if __name__ == " __main__ " :
app . run ( host = ' 0.0.0.0 ' , port = 80 )