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')