Procházet zdrojové kódy

Add updating of achievements

master
Chris Smith před 14 roky
rodič
revize
3a50ae667e
2 změnil soubory, kde provedl 57 přidání a 8 odebrání
  1. 7
    5
      src/Scraper.py
  2. 50
    3
      src/helloworld.py

+ 7
- 5
src/Scraper.py Zobrazit soubor

1
 from BeautifulSoup import BeautifulSoup
1
 from BeautifulSoup import BeautifulSoup
2
+from datetime import datetime
2
 import urllib2
3
 import urllib2
3
 
4
 
4
 class scraper:
5
 class scraper:
6
     def scrape_spore(self, credentials):
7
     def scrape_spore(self, credentials):
7
         results = []
8
         results = []
8
         url = "http://www.spore.com/view/achievements/%s" % credentials
9
         url = "http://www.spore.com/view/achievements/%s" % credentials
10
+        fmt = "%a %B %d, %Y"
11
+
9
         try:
12
         try:
10
           result = urllib2.urlopen(url).read()
13
           result = urllib2.urlopen(url).read()
11
           soup = BeautifulSoup(result)
14
           soup = BeautifulSoup(result)
12
           achdiv = soup.find('h2', 'achievementsH2').findNextSibling('div', 'fields')
15
           achdiv = soup.find('h2', 'achievementsH2').findNextSibling('div', 'fields')
13
 
16
 
14
           for ach in achdiv.findAll('table'):
17
           for ach in achdiv.findAll('table'):
15
-              img = "http://www.spore.com%s" % ach.find('img')['src']
16
-              title = ach.find('b').string.strip()
17
-              desc = ach.find('div', 'achievementDesc').contents[0].strip()
18
-              date = ach.find('span').string.strip()
19
-              results.append({'img': img, 'title': title, 'desc': desc, 'date': date})
18
+              results.append({'img': "http://www.spore.com%s" % ach.find('img')['src'],
19
+                              'title': ach.find('b').string.strip(),
20
+                              'desc': ach.find('div', 'achievementDesc').contents[0].strip(),
21
+                              'date': datetime.strptime(ach.find('span').string.strip(), fmt)})
20
         except urllib2.URLError, e:
22
         except urllib2.URLError, e:
21
           handleError(e)
23
           handleError(e)
22
 
24
 

+ 50
- 3
src/helloworld.py Zobrazit soubor

46
 
46
 
47
         self.show_footer()
47
         self.show_footer()
48
 
48
 
49
-        self.response.out.write(scraper().scrape_spore("csmith87"))
50
-
51
     def show_header(self):
49
     def show_header(self):
52
         self.response.out.write("""
50
         self.response.out.write("""
53
           <html>
51
           <html>
94
             self.response.out.write(cgi.escape(account.source.name))
92
             self.response.out.write(cgi.escape(account.source.name))
95
             self.response.out.write("</td><td>")
93
             self.response.out.write("</td><td>")
96
             self.response.out.write(cgi.escape(account.credentials))
94
             self.response.out.write(cgi.escape(account.credentials))
97
-            self.response.out.write("</td></tr>")
95
+            self.response.out.write("""
96
+               </td><td>
97
+                 <form action="/worker/update" method="post">
98
+                 <input type="hidden" name="key" value=""")
99
+            self.response.out.write('"' + cgi.escape(str(account.key())) + '"')
100
+            self.response.out.write(""">
101
+                 <input type="submit" value="Update now">
102
+               </td></tr>
103
+               """)
98
 
104
 
99
         self.response.out.write("</table>")
105
         self.response.out.write("</table>")
100
         self.response.out.write("""<h2>Add Account</h2>
106
         self.response.out.write("""<h2>Add Account</h2>
144
 
150
 
145
 
151
 
146
 class UpdatePage(webapp.RequestHandler):
152
 class UpdatePage(webapp.RequestHandler):
153
+
147
     def post(self):
154
     def post(self):
148
         account = db.get(db.Key(self.request.get('key')))
155
         account = db.get(db.Key(self.request.get('key')))
156
+        res = []
157
+
158
+        if account.source.name == 'Spore':
159
+            res = scraper().scrape_spore(account.credentials)
160
+
161
+        UpdatePage.merge_achievements(account, res)
162
+
163
+    @staticmethod
164
+    def merge_achievements(account, achievements):
165
+        source = account.source
166
+        user = account.user
167
+
168
+        for awarded in achievements:
169
+            achievement = UpdatePage.get_achievement(source, awarded)
170
+
171
+            res = AwardedAchievement.gql("WHERE achievement = :ac AND user = :user",
172
+                                         ac=achievement,
173
+                                         user=account.user)
174
+
175
+            if res.count(1) == 0:
176
+                AwardedAchievement(achievement=achievement,
177
+                                   user=account.user,
178
+                                   awarded=awarded['date']).put()
179
+
180
+    @staticmethod
181
+    def get_achievement(source, achievement):
182
+        res = Achievement.gql("WHERE name = :name AND source = :source",
183
+                              name=achievement['title'],
184
+                              source=source)
185
+
186
+        if res.count(1) == 0:
187
+            res = Achievement(name=achievement['title'],
188
+                              image=achievement['img'],
189
+                              description=achievement['desc'],
190
+                              source=source)
191
+            res.put()
192
+        else:
193
+            res = res.get()
194
+
195
+        return res
149
 
196
 
150
 application = webapp.WSGIApplication([('/', MainPage),
197
 application = webapp.WSGIApplication([('/', MainPage),
151
                                       ('/admin/addsource', AddSourcePage),
198
                                       ('/admin/addsource', AddSourcePage),

Načítá se…
Zrušit
Uložit