./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
Комментариев нет:
Отправить комментарий