Получение последнего сообщения из Twitter

Пишем сейчас на Django сайт, где требуется получать последнее сообщение из Twitter аккаунта корпоративного микроблога.

Небольшие отличия есть, а именно — мы получаем данные из Twitter API в формате JSON (используется библиотека [URL=http://pypi.python.org/pypi/simplejson/]simplejson[/URL]), а не в XML, как это было в PHP версии. Можно без проблем использовать и XML, просто с JSON мне удобнее работать.

Аналогично реализовано кеширование твитта в локальный файл и обновление через определенный промежуток времени.

Код, вся дополнительная информация в комментариях:
from django.conf import settings
from time import time
import urllib, os, simplejson

class Twitter:
  """
  Скачиваем последнее сообщение из Twitter пользователя.
  
  Требуется:
  - библиотека simplejson (http://pypi.python.org/pypi/simplejson/)
  - библиотека urllib
  - библиотека os
  - метод time.time()
  
  Необходимо в settings.py добавить переменные:
  
  TWITTER_ACCOUNT = 'Skaizer' # Логин пользователя, чью ленту будем читать.
  TWITTER_CACHE_PERIOD = 3600 # Частота обновления кеша в миллисекундах, когда 0, кеш игнорируется.
  TWITTER_CACHE_FILE = 'last_twitt.txt'; # Имя файла, куда будем дампить кеш. Строится путь относительно MEDIA_ROOT.
  
  """
  def __init__(self):
    self.twitt_file = getattr(settings,'MEDIA_ROOT','./') + getattr(settings,'TWITTER_CACHE_FILE','last_twitt.txt')
    self.cache_period = getattr(settings,'TWITTER_CACHE_PERIOD',0)
    self.username = getattr(settings,'TWITTER_ACCOUNT',None)
    
  def returnLastTwitt(self):
    """
    Возвращаем кеш, если он имеется, и по времени существует не менее установленного в конфигах периода.
    Иначе возвращаем сообщение из инета.
    """
    if self.cache_period !=0:
      if os.path.exists(self.twitt_file):
        if self.cache_period > self.getCacheDateDiff():
          return self.getLastFromCache()
    return self.getLastFromWeb()
    
  def getLastFromWeb(self):
    """
    Скачивает твиттер ленту в Интернет и выбирает последнее сообщение
    """
    feed = 'http://twitter.com/statuses/user_timeline/' + self.username + '.json';
    feed_obj  = simplejson.loads(urllib.urlopen(feed).read())
    last_twitt = feed_obj[0]['text']
    self.cache_twitt(last_twitt.encode("utf_8"))
    return last_twitt
    
  def cache_twitt(self, msg):
    """
    Записывает последний твитт в локальный файл
    """
    handle = open(self.twitt_file,'w')
    handle.write(msg)
    handle.close()
    
  def getCacheDateDiff(self):
    """
    Считает, как давно был создан файл кеша в миллисекундах.
    """
    diff = float(time()) - float(os.path.getmtime(self.twitt_file))
    return diff
    
  def getLastFromCache(self):
    """
    Возвращает закешированное сообщение из файла.
    """
    handle = open(self.twitt_file,'r')
    cached_twitt = handle.read()
    handle.close()
    return cached_twitt
    
  def getLast(self):
    if not self.username:
      return False
    return self.returnLastTwitt()

Вот так класс используется:
def last_twitt():
    t = Twitter()
    return {
      'last_twitt' : t.getLast(),
    }

Все просто, без заморочек, пользуйтесь на здоровье.
Теги:
Python, сообщения, Twitter
Добавлено: 17 Сентября 2013 03:24:54 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...