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

Разделы

пятница, 20 мая 2011 г.

Новости

С индексами вроде разобрались. Только у меня на данный момент висит два индекса в статусе "Error", которые мне не удаётся удалить командой:
./appcfg.py vacuum_indexes trendstat/
Неприятно, но никаких дискомфортов в работе это не создаёт. Поэтому кладём болт и двигаемся дальше. В предыдущей статье мы немного отпарсили гугл. В этот раз мы поступим иначе. Гугл сам предлагает совершенно бесплатно свои данные, правда в ограниченных количествах, около 1000 запросов в сутки через API. Для этого просто надо получить ключик для своего приложения. Я создам файл 'settings.py' куда я записал ключиг, и в будущем если на него и будут появляться ссылки в листингах то там содержится секретная информация типа ключей паролей и т.д., т.е. одни константы. Вообщем ключиг есть, вспоминаем там как и чего с этим API делать. Вообщем никаких сюрпризов, но вот проблема которая меня мучала сейчас всплыла: 'urllib' там есть вообще? Оказывается что есть, только через него нельзя к HTTP-библиотеке обращаться, а так используете в своей удовольствие. Писал за полночь, вот в итоге что получилось.
Листинг news.py:
#!/usr/bin/env python
# encoding: utf-8

from google.appengine.api import urlfetch
from urllib import quote
from settings import GOOLE_KEY
import re
try:
  import json
except ImportError:
  import simplejson as json

def get_news(key):
  def create_news(title, url, content):
    item = '''%s

%s

''' % \ (url, title, content if len(content) < 150 else "%s..." % content[:147]) return item.replace("\n", "") #control news = [] rt = re.compile("<.*?>", re.I) news_url = 'http://ajax.googleapis.com/ajax/services/search/news?v=1.0&q=%s&key=%s' % \ (quote(key), GOOLE_KEY) res = urlfetch.fetch(news_url) if res.status_code != 200: return news jj = json.loads(res.content) if jj.has_key(u"responseStatus") and jj[u"responseStatus"] == 200: try: news = [create_news(rt.sub("", url[u"title"]), url[u"unescapedUrl"], rt.sub("", url[u"content"])) \ for url in jj[u"responseData"][u"results"]] except KeyError: pass return news

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

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

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

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