-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathapp.py
73 lines (60 loc) · 2.42 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import json
import traceback
from collections import OrderedDict
from optparse import OptionParser
import mf2py
import mf2util
from flask import Flask, jsonify, make_response, render_template, request
parser = OptionParser()
parser.add_option(
"-d",
"--debug",
action="store_true",
default=False,
help="Run application in debug mode",
)
(options, args) = parser.parse_args()
app = Flask(__name__)
mf2py.Parser.user_agent = "python.microformats.io (mf2py/" + mf2py.__version__ + ") Mozilla/5.0 Chrome/29.0.1547.57 Safari/537.36"
mf2py.Parser.dict_class = OrderedDict
@app.route("/", methods=["GET", "POST"])
def index():
try:
util = request.args.get("util") or request.form.get("util")
url = request.args.get("url") or request.form.get("url")
doc = request.args.get("doc") or request.form.get("doc")
parser = request.args.get("parser") or request.form.get("parser")
callback = request.args.get("callback") or request.form.get("callback")
cached_mf2 = {}
def fetch_mf2(url):
if url in cached_mf2:
return cached_mf2[url]
p = mf2py.parse(url=url, html_parser=parser or None, img_with_alt = True)
cached_mf2[url] = p
return p
if url or doc:
p = mf2py.parse(
url=url or None, doc=doc or None, html_parser=parser or None, img_with_alt = True
)
if util:
if any("h-feed" in item["type"] for item in p["items"]):
p = mf2util.interpret_feed(
p, url, want_json=True, fetch_mf2_func=fetch_mf2
)
else:
p = mf2util.interpret(
p, url, want_json=True, fetch_mf2_func=fetch_mf2
)
if callback:
response = make_response("{}({})".format(callback, json.dumps(p)), 200)
response.headers["Content-Type"] = "text/javascript"
else:
response = make_response(json.dumps(p, indent=True), 200)
response.headers["Content-Type"] = "application/json"
return response
return render_template("index.jinja2", mf2py_version=mf2py.__version__)
except BaseException as e:
traceback.print_exc()
return jsonify(error="%s: %s" % (type(e).__name__, e)), 400
if options.debug:
app.run(debug=True, port=8080)