Делаем mash-up приложение на трэндах

Разделы

четверг, 19 мая 2011 г.

Хранилище

После того как крон настроен можно использовать его для пополнения БД именуемой в терминах гугл - хранилище. Немного покопавшись в доках, поймал себя на на том что крутится мысль что это жесть. На самом деле всё оказалось не так. Первое что пришлось сделать изменить структуры модели (таблицы в терминах хранилища), сделать её ещё более линейной и тупой, ниже вы можете в этом убедится сами. Это нормально, т.к. к этой модели будет прикручен кэш, отдельная модель которая будет содержать нужные выборки (но это потом). Ввиду того что уже крон настроен, осталось прописать действия в скрипте. По крону добавляется запись, а по запросу выдаётся.
Листинг 'main.py':
#!/usr/bin/env python
# encoding: utf-8

from bottle import route, run, view, request, redirect, response, post, abort, debug, error
from google.appengine.api import urlfetch
from google.appengine.ext import db
import re

debug(True)

class Trends(db.Model):
  trend = db.StringProperty()
  time = db.DateTimeProperty(auto_now=True)
  video = db.StringProperty()
  news = db.TextProperty()
  ct = db.TextProperty()
  cf = db.TextProperty()


@route('/')
@route('')
@view('home')
def home_view():
  trends = db.GqlQuery("SELECT * FROM Trends ORDER BY time DESC LIMIT 20")
  return {"trends" : trends }

@route('/tasks/trends_update')
@route('/tasks/trends_update/')
def trends_update():
  trends = []
  trend_url = "http://www.google.com/trends/hottrends/atom/hourly"
  rl = re.compile("
  • .*?
  • ", re.I|re.S) rt = re.compile("<.*?>", re.I) res = urlfetch.fetch(trend_url) if res.status_code != 200: abort(404) content = res.content trends = rl.findall(content) trends = [rt.sub("", t).strip() for t in trends] for t in trends: __t = Trends() __t.trend = t __t.video = "" __t.news = "" __t.ct = "" __t.cf = "" __t.put() def main(): run(server='gae') if __name__ == '__main__': main()

    Комментариев нет:

    Отправить комментарий

    Постоянные читатели

    Copyright © trendec. Технологии Blogger.