1 |
from flask import Flask |
2 |
from flask import request |
3 |
import lxml.html |
4 |
import cgi |
5 |
import pymongo |
6 |
from bson import Code |
7 |
import urllib2 |
8 |
import StringIO |
9 |
import gdata.gauth |
10 |
import gdata.blogger.client |
11 |
from flask import g |
12 |
from flask import redirect |
13 |
app = Flask(__name__) |
14 |
@app.route('/') |
15 |
def start_page() : |
16 |
d = {} |
17 |
d['foruri'] = request.args['foruri'] |
18 |
myhandler1 = urllib2.Request(d['foruri'],headers={'User-Agent':"Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11"}) #A fix to send user-agents, so that sites render properly. |
19 |
a = urllib2.urlopen(myhandler1) |
20 |
page = a.read() |
21 |
a.close() |
22 |
try: |
23 |
page = unicode(page,'utf-8') #Hack to fix improperly displayed chars on wikipedia. |
24 |
except UnicodeDecodeError: |
25 |
pass #Some pages may not need be utf-8'ed |
26 |
root = lxml.html.parse(StringIO.StringIO(page)).getroot() |
27 |
if request.args.has_key('lang') == False and request.args.has_key('blog') == False: |
28 |
root.make_links_absolute(d['foruri'], resolve_base_href = True) |
29 |
script_test = root.makeelement('script') |
30 |
root.body.append(script_test) |
31 |
# script_test.set("src", "http://192.168.100.100/server/ui.js") |
32 |
script_test.set("src", "http://dev.a11y.in/alipi/ui.js") |
33 |
# script_test.set("src", "http://localhost/alipi-1/server/ui.js") |
34 |
script_test.set("type", "text/javascript") |
35 |
|
36 |
script_jq_mini = root.makeelement('script') |
37 |
root.body.append(script_jq_mini) |
38 |
script_jq_mini.set("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js") |
39 |
script_jq_mini.set("type", "text/javascript") |
40 |
|
41 |
style = root.makeelement('link') |
42 |
root.body.append(style) |
43 |
style.set("rel","stylesheet") |
44 |
style.set("type", "text/css") |
45 |
# style.set("href", "http://192.168.100.100/server/stylesheet.css") |
46 |
style.set("href", "http://dev.a11y.in/alipi/stylesheet.css") |
47 |
# style.set("href", "http://localhost/alipi-1/server/stylesheet.css") |
48 |
|
49 |
connection = pymongo.Connection('localhost',27017) |
50 |
db = connection['alipi'] |
51 |
collection = db['post'] |
52 |
if collection.find_one({"about" : request.args['foruri']}) is not None: |
53 |
ren_overlay = root.makeelement('div') |
54 |
root.body.append(ren_overlay) |
55 |
ren_overlay.set("id", "ren_overlay") |
56 |
ren_overlay.text = "Narration(s) available" |
57 |
|
58 |
close = root.makeelement('input') |
59 |
ren_overlay.append(close) |
60 |
close.set("id", "close-button") |
61 |
close.set("type", "submit") |
62 |
close.set("onClick", "a11ypi.close();") |
63 |
close.set("value", "Close") |
64 |
|
65 |
overlay1 = root.makeelement('div') |
66 |
root.body.append(overlay1) |
67 |
overlay1.set("id", "overlay1") |
68 |
|
69 |
opt = root.makeelement('option') |
70 |
opt.text = "Choose a narration" |
71 |
|
72 |
rpl = root.makeelement('select') |
73 |
overlay1.append(rpl) |
74 |
rpl.append(opt) |
75 |
rpl.set("id", "menu-button") |
76 |
rpl.set("onclick", "a11ypi.ajax();") |
77 |
|
78 |
overlay2 = root.makeelement('div') |
79 |
root.body.append(overlay2) |
80 |
overlay2.set("id", "overlay2") |
81 |
|
82 |
btn = root.makeelement('input') |
83 |
overlay2.append(btn) |
84 |
btn.set("id", "edit-button") |
85 |
btn.set("type", "submit") |
86 |
btn.set("onClick", "a11ypi.testContext();") |
87 |
btn.set("value", "EDIT") |
88 |
return lxml.html.tostring(root) |
89 |
|
90 |
elif request.args.has_key('lang') == True and request.args.has_key('blog') == False: |
91 |
d['lang'] = request.args['lang'] |
92 |
script_test = root.makeelement('script') |
93 |
root.body.append(script_test) |
94 |
script_test.set("src", "http://dev.a11y.in/alipi/ui.js") |
95 |
#script_test.set("src", "http://192.168.100.100/server/ui.js") |
96 |
script_test.set("type", "text/javascript") |
97 |
root.body.set("onload","a11ypi.ren()"); |
98 |
root.make_links_absolute(d['foruri'], resolve_base_href = True) |
99 |
return lxml.html.tostring(root) |
100 |
|
101 |
elif request.args.has_key('interactive') == True and request.args.has_key('blog') == True: |
102 |
script_test = root.makeelement('script') |
103 |
root.body.append(script_test) |
104 |
script_test.set("src", "http://dev.a11y.in/alipi/ui.js") |
105 |
#script_test.set("src", "http://192.168.100.100/server/ui.js") |
106 |
script_test.set("type", "text/javascript") |
107 |
root.body.set("onload","a11ypi.filter()"); |
108 |
root.make_links_absolute(d['foruri'], resolve_base_href = True) |
109 |
return lxml.html.tostring(root) |
110 |
|
111 |
elif request.args.has_key('interactive') == False and request.args.has_key('blog') == True: |
112 |
script_test = root.makeelement('script') |
113 |
root.body.append(script_test) |
114 |
script_test.set("src", "http://dev.a11y.in/alipi/ui.js") |
115 |
#script_test.set("src", "http://192.168.100.100/server/ui.js") |
116 |
script_test.set("type", "text/javascript") |
117 |
|
118 |
script_jq_mini = root.makeelement('script') |
119 |
root.body.append(script_jq_mini) |
120 |
script_jq_mini.set("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js") |
121 |
script_jq_mini.set("type", "text/javascript") |
122 |
|
123 |
style = root.makeelement('link') |
124 |
root.body.append(style) |
125 |
style.set("rel","stylesheet") |
126 |
style.set("type", "text/css") |
127 |
script_test.set("src", "http://dev.a11y.in/alipi/stylesheet.css") |
128 |
#style.set("href", "http://192.168.100.100/server/stylesheet.css") |
129 |
|
130 |
connection = pymongo.Connection('localhost',27017) |
131 |
db = connection['alipi'] |
132 |
collection = db['post'] |
133 |
if collection.find_one({"about" : request.args['foruri']}) is not None: |
134 |
ren_overlay = root.makeelement('div') |
135 |
root.body.append(ren_overlay) |
136 |
ren_overlay.set("id", "ren_overlay") |
137 |
ren_overlay.text = "Narration(s) available" |
138 |
|
139 |
close = root.makeelement('input') |
140 |
ren_overlay.append(close) |
141 |
close.set("id", "close-button") |
142 |
close.set("type", "submit") |
143 |
close.set("onClick", "a11ypi.close();") |
144 |
close.set("value", "Close") |
145 |
|
146 |
overlay1 = root.makeelement('div') |
147 |
root.body.append(overlay1) |
148 |
overlay1.set("id", "overlay1") |
149 |
|
150 |
opt = root.makeelement('option') |
151 |
opt.text = "Choose a narration" |
152 |
|
153 |
rpl = root.makeelement('select') |
154 |
overlay1.append(rpl) |
155 |
rpl.append(opt) |
156 |
rpl.set("id", "menu-button") |
157 |
rpl.set("onclick", "a11ypi.ajax1();") |
158 |
|
159 |
overlay2 = root.makeelement('div') |
160 |
root.body.append(overlay2) |
161 |
overlay2.set("id", "overlay2") |
162 |
|
163 |
btn = root.makeelement('input') |
164 |
overlay2.append(btn) |
165 |
btn.set("id", "edit-button") |
166 |
btn.set("type", "submit") |
167 |
btn.set("onClick", "a11ypi.testContext();") |
168 |
btn.set("value", "EDIT") |
169 |
root.make_links_absolute(d['foruri'], resolve_base_href = True) |
170 |
return lxml.html.tostring(root) |
171 |
|
172 |
@app.route('/login') |
173 |
def do_login(): |
174 |
CONSUMER_SECRET = 'xDNhUo4MrsYCdSVLT1UDrkO7' |
175 |
CONSUMER_KEY = 'dev.a11y.in' |
176 |
client = gdata.blogger.client.BloggerClient(source='Alipi') |
177 |
SCOPES = ['http://www.blogger.com/feeds'] |
178 |
oauth_callback_url = 'http://dev.a11y.in/take_token' |
179 |
request_token = client.GetOAuthToken(SCOPES, oauth_callback_url, CONSUMER_KEY, consumer_secret=CONSUMER_SECRET) |
180 |
g.my_token = request_token |
181 |
return redirect('google.com') |
182 |
# return redirect(request_token.generate_authorization_url(),code=302) |
183 |
|
184 |
@app.route('/take_token') |
185 |
def post_to_blog(): |
186 |
request_token = gdata.gauth.AuthorizeRequestToken(g.my_token, request.uri) |
187 |
access_token = client.GetAccessToken(request_token) |
188 |
client = gdata.blogger.client.BloggerClient(source='yourCo-yourAppName-v1') |
189 |
client.auth_token = gdata.gauth.OAuthHmacToken(CONSUMER_KEY, CONSUMER_SECRET, request_token.token,request_token.token_secret, gdata.gauth.ACCESS_TOKEN) |
190 |
feed = client.GetFeed() |
191 |
for entry in feed.entry: |
192 |
return entry |
193 |
|
194 |
import logging,os |
195 |
from logging import FileHandler |
196 |
|
197 |
fil = FileHandler(os.path.join(os.path.dirname(__file__),'logme'),mode='a') |
198 |
fil.setLevel(logging.ERROR) |
199 |
app.logger.addHandler(fil) |
200 |
|
201 |
if __name__ == '__main__': |
202 |
app.run(debug=True, host='0.0.0.0') |