-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathapp.py
73 lines (62 loc) · 2.01 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 os
from flask import Flask
from flask import request
from flask import jsonify
from flask import render_template
from crossref import fetch_links
import py360link
default_sersol_key = 'rl3tp7zf5x'
app = Flask(__name__)
@app.route('/fetch-cite', methods=['POST'])
def fetch_cite():
if request.method == 'POST':
cite = request.form.items()[0][0]
results = fetch_links(cite)
return jsonify(results)
@app.route('/resolve/<key>/', methods=['GET'])
@app.route('/resolve/', methods=['GET'])
def resolve(key=None):
raw_query = request.query_string
#remove http prefix from doi
query = raw_query.replace('http://dx.doi.org/', '')
sersol_key = request.view_args.get('key', default_sersol_key)
#Setup some defaults for the json response.
d = {}
d['key'] = sersol_key
d['library'] = None
d['error'] = False
d['url'] = None
d['provider'] = None
sersol = py360link.get(query, key=sersol_key, timeout=10)
resolved = sersol.json()
try:
d['library'] = resolved['metadata']['library']
groups = resolved['records'][0]['links']
if groups is None:
groups = []
#Get the first link to a full text source
for grp, link in enumerate(groups):
if link['type'] == 'article':
d['url'] = link['url']
d['provider'] = link['anchor']
break
except IndexError:
d['error'] = True
print('#ERRROR 360Link %s' % query)
d['query'] = query
return jsonify(d)
@app.route('/<library>/')
@app.route('/')
def index(library=None):
ctx = dict(
ga_tracking_code=os.getenv('GA_TRACKING_CODE'),
library=library,
)
return render_template('index.html', **ctx)
if __name__ == '__main__':
# Bind to PORT if defined, otherwise default to 5000.
port = int(os.environ.get('PORT', 5000))
params = dict(host='0.0.0.0', port=port)
if os.environ.get('HOME', '').find('vagrant') > -1:
params['debug'] = True
app.run(**params)