Настало время создать первую страницу, по формату которой будет большая часть этого сайтега. Это будет скорей такая косметическая работа, т.к. данные уже более или менее для этого есть. Вообщем главная страница полегчала, а каждый тренд доступен по ссылке с новостями и видео. В коде ничего нового не добавилось, исключительно копипэйст. После этого можно смело подвести черту успешно выполненной подготовительной работы.
Но что б статья не была совсем уж голой, я скажу два слова о шаблонах. После того как вчера была проделана огромная работа по адаптации архитектуры к App Engine. Под вечер провозился с глупой ошибкой в шаблоне, в связи с этим перелопатил все доступные шаблоны. Я пользуюсь стандартным из Bottle и на нём пока останусь. Интересным из всех показался только Mako. Не смотря на обилие файлов в библиотеке по скорости он не уступает стандартному (но всё равно это гораздо медленней чем чистый питон), а возможности у него сопоставимы с самим языком. т.е. он фактически обеспечивает прозрачность HTML-кода для питона. И прям в HTML объявлять функции, обрабатывать переменные. Вообщем, при разработке большого проекта вещь вполне достойная.
Делаем mash-up приложение на трэндах
Разделы
- квоты (2)
- amazon (3)
- amazon api (1)
- atom (1)
- blogger (1)
- bottle (3)
- bug (2)
- cron (1)
- datastore (6)
- facebook (1)
- facebook api (1)
- google api (3)
- google app engine (7)
- google plus (1)
- google storage (1)
- oauth (5)
- picasa (1)
- shorten url (1)
- twitter (6)
- twitter api (1)
- wordpress (1)
- youtube (1)
Показаны сообщения с ярлыком bottle. Показать все сообщения
Показаны сообщения с ярлыком bottle. Показать все сообщения
суббота, 21 мая 2011 г.
четверг, 19 мая 2011 г.
День третий
Тренды гугл обновляет каждый час, поэтому нечего туда каждый раз лазить и парсить, а сделать это надо через крон и сохранить в "хранилище". Для этого сначала надо разобраться как там устроен крон.
Крон там работает по схеме HTTP запросов методом GET по указанному вами адресу. Для этого создаётся ещё один yaml-файлик:
Листинг cron.yaml:
Листинг 'app.yaml':
Крон там работает по схеме HTTP запросов методом GET по указанному вами адресу. Для этого создаётся ещё один yaml-файлик:
Листинг cron.yaml:
cron: - description: hourly trends update url: /tasks/trends_update schedule: every 1 hoursТеперь надо добавить обработчик этого адреса в скрипт 'main.py'. А что б его не мог запускать кто попало, перед перенаправленеим на основной скрипт в 'app.yaml' указываем что обращаться по адресу можно только с правами админа.
Листинг 'app.yaml':
application: trendstat version: 1 runtime: python api_version: 1 handlers: - url: /static static_dir: static - url: /(.*\.(gif|png|jpg)) static_files: static/\1 upload: static/(.*\.(gif|png|jpg)) - url: /tasks/trends_update script: main.py login: admin - url: /robots.txt static_files: static/robots.txt upload: static/robots.txt - url: /.* script: main.py
среда, 18 мая 2011 г.
Парсим тренды
Думаю настало время с чего-то начать. Начнём пожалуй с самого просто - тупо спарсим тренды, которые удобно располагаются прямо в атоме. Гугл по этому поводу надеюсь не растроится, что его немного отпарсили, всё таки на то он и атом. Насчёт удобно это я скорей загнул, т.к. с атомом не работал ни разу. И в данный момент пытаюсь с помощью поиска разрешить философский вопрос: как в GAE принято, писать заново, или попробовать найти библиотеку.
Вообщем 10 минут поиска меня убедили что здесь принято делать большую часть работы самому а не ждать помощи от библиотек. Собственно как оказалось это 2 строчки кода, но об этом ниже.
Итак, как выглядит приложение в Google App Engine? Это как минимум 3 файла: 'app.yaml', 'index.yaml' и приложение 'main.py'. Гугл на своё усмотрение предлагает использовать либо свою разработку в плане фреймворка, либо любой который работает с WSGI - что я и сделал. Сразу же взял Bottle. Таким образом приложение представляет из себя следующий список:
Ниже приведу листинг файлов.
Файл 'main.py':
.*? ", re.I|re.S)
rt = re.compile("<.*?>", re.I)
res = urlfetch.fetch(trend_url)
if res.status_code == 200:
content = res.content
trends = rl.findall(content)
trends = [rt.sub("", t).strip() for t in trends]
return {"trends" : trends }
def main():
run(server='gae')
if __name__ == '__main__':
main()
Файл 'app.yaml':
Вообщем 10 минут поиска меня убедили что здесь принято делать большую часть работы самому а не ждать помощи от библиотек. Собственно как оказалось это 2 строчки кода, но об этом ниже.
Итак, как выглядит приложение в Google App Engine? Это как минимум 3 файла: 'app.yaml', 'index.yaml' и приложение 'main.py'. Гугл на своё усмотрение предлагает использовать либо свою разработку в плане фреймворка, либо любой который работает с WSGI - что я и сделал. Сразу же взял Bottle. Таким образом приложение представляет из себя следующий список:
[trendec@localhost trendstat]$ ls -al total 248 drwxrwxr-x 4 trendec trendec 4096 May 18 20:11 . drwxr-xr-x 9 trendec trendec 4096 May 17 23:21 .. -rw-r----- 1 trendec trendec 142 May 18 19:47 app.yaml -rwxr-xr-x 1 trendec trendec 98154 May 14 00:26 bottle.py -rw-r--r-- 1 trendec trendec 114796 May 18 19:47 bottle.pyc -rw-r----- 1 trendec trendec 471 May 18 20:03 index.yaml -rwxr-x--- 1 trendec trendec 818 May 18 20:03 main.py drwxrwxr-x 2 trendec trendec 4096 May 18 19:16 static drwxrwxr-x 2 trendec trendec 4096 May 18 19:16 viewsВ директории 'static' содержится файл стилей 'simple.css' и 'robots.txt' а в директории 'view' шаблон главной страницы.
Ниже приведу листинг файлов.
Файл '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
import re
debug(True)
@route('/')
@route('')
@view('home')
def home_view():
trends = []
trend_url = "http://www.google.com/trends/hottrends/atom/hourly"
rl = re.compile("Файл 'app.yaml':
application: trendstat version: 1 runtime: python api_version: 1 handlers: - url: /static static_dir: static - url: /(.*\.(gif|png|jpg)) static_files: static/\1 upload: static/(.*\.(gif|png|jpg)) - url: /robots.txt static_files: static/robots.txt upload: static/robots.txt - url: /.* script: main.py
Подписаться на:
Сообщения (Atom)
Обо мне
Мои проекты
Постоянные читатели
Архив блога
Copyright © trendec. Технологии Blogger.