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

Разделы

среда, 18 мая 2011 г.

Парсим тренды

Думаю настало время с чего-то начать. Начнём пожалуй с самого просто - тупо спарсим тренды, которые удобно располагаются прямо в атоме. Гугл по этому поводу надеюсь не растроится, что его немного отпарсили, всё таки на то он и атом. Насчёт удобно это я скорей загнул, т.к. с атомом не работал ни разу. И в данный момент пытаюсь с помощью поиска разрешить философский вопрос: как в GAE принято, писать заново, или попробовать найти библиотеку.

Вообщем 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("
  • .*?
  • ", 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':
    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

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

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

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

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