构建一个 Twitter Web 应用程序


最近,Twitter 似乎无所不在。政客、演员、父母 — 只要您说得出来 — 都在使用社交网络媒介。客户不仅要求 Web 应用程序是支持 Twitter 的,而且还要求它具备出色的 Web 2.0 外观,而这只能通过 Ajax 获得。让我们进入 Django 和 jQuery 的世界。


图 1. Twitter 面板显示了最新的 tweet


  依赖项

  常用缩略语

  Ajax:Asynchronous JavaScript + XML

  API:应用程序编程接口

  CSS:级联样式表

  FAQ:常见问题解答

  HTML:超文本标记语言

  HTTP:超文本传输协议

  REST:具象状态传输

  UI:用户界面

  我强烈建议您通读 Django 教程,然后再开始动手。此外,还要求您具备扎实的 JavaScript 基础知识。当然,Twitter 帐户以及对术语的了解(比如什么是 tweet)也必不可少。而您的工具箱中则应该包含 Python、Django、jQuery 和 python-twitter 包装程序。

  本文中的这个 Web 应用程序不需要数据库;Twitter 基础结构将保存所有数据。但是,作为对此应用程序的一个改进,也可以集成一个数据库,甚至可以使用 Django 和数据库来将您的 Twitter 帐户上的内容复制到您自己的服务器上以生成副本。本文还假设您使用的是 Linux?。

  我使用 Python V2.5.2 测试这个示例应用程序。

  Twitter 的数据通过两个 API 公开给公众,一个是搜索 API,一个是 RESTful API。(Twitter FAQ 中提到过将来计划只用单一一个 API)。一个 REST Web 服务指的是在 HTTP 内实现的一个 Web 服务,它遵循 REST 原理。

  安装 python-twitter 包装程序

  我们所需的最后一个组件是 python-twitter,其项目站点上将它定义为 “围绕 Twitter API 及 twitter 数据模型的一个 python 包装程序”。现在已经有几个库可以通过多种语言与 Twitter 的服务交互 — 从 Ruby 到 Eiffel,几乎任何语言。目前,有五个库可以交互 Python 与 Twitter,它们是 DeWitt Clinton 的 Python-twitter、Andrew Price 的 python-twyt、Dustin Sallings 的 twitty-twister、Ryan McGrath 的 twython 以及 Josh Roesslein 的 Tweepy。

  python-twitter 库需要依赖项 simplejson。在下载 simplejson 后,通过发出清单 1 内的这些命令来安装它。


清单 1. 安装 simplejson 所需的命令

tar -zxvf simplejson-2.0.9.tar.gz 
cd simplejson-2.0.9 
sudo python setup.py build 
sudo python setup.py install 

  如果您更愿意使用 egg 包,可以使用命令 sudo easy_install simplejson-2.0.9-py2.5-win32.egg。

  现在,可以安装 python-twitter。在下载了这个包之后,执行清单 2 内的命令。


清单 2. 安装 python-twitter 所需的命令

tar -zxvf python-twitter-0.6.tar.gz 
cd python-twitter-0.6 
sudo python setup.py build 
sudo python setup.py install 

  安装 Django

  接下来要安装的是 Django,它是一种功能强大的 Python Web 框架。本文中的示例应用程序是用 V1.0.2 final 编写的,但最新的稳定版本已经是 1.1。 Django 的安装与 simplejson 和 python-twitter 的安装一样简单。在下载了这个包后,在终端内输入清单 3 内的命令即可。


清单 3. 安装 Django 所需的命令

tar -zxvf Django-1.0.2.tar.gz 
cd Django-1.0.2 
sudo python setup.py build 
sudo python setup.py install 

  通过尝试使用命令 $ django-admin --version 来验证 Django 是否处于您的路径内。如果一切进展顺利,就可以开始编写代码了。

  python-twitter 库

  在安装了 python-twitter 之后,就可以探索它的功能了。要访问这个库,可以使用命令 import twitter。twitter 模块为 Twitter 数据模型和 API 提供了包装程序。这里有三个数据模型类:twitter.Status、twitter.User 和 twitter.DirectMessage。所有的 API 调用都会返回其中一个类的一个对象。要访问此 API,需要生成 twitter.Api()(注意其中的第一个字母是大写的)的一个实例。在不为这个构造函数提供任何实参的情况下创建实例是允许的,但只限于不需要登录的那些方法调用。要进行登录访问,请使用如下代码:

import twitter 
api = twitter.Api(username='yourUserName', password='yourPassword') 

  借助一个实例化了的 Api 对象,您就获得自己的追随者、您所追随的人和状态 (tweet);以及发布您当前的状态等。例如,要获得一个用户的状态列表,可以调用 statuses = api.GetUserTimeline(),它会返回 twitter.Status 对象的一个列表。要创建具有这些 tweet 的文本(字符串)的另外一个列表,应该使用列表理解(list comprehension):>>>print [s.text for s in statuses]。

  表 1 列出了在这个 Web 应用程序内将要用到的类和方法。要想获得完整的文档,请使用 pydocs — 比如,$ pydoc twitter.Api — 或访问 python-twitter 文档页面。


表 1. 一些有用的 python-twitter API 方法

方法名称 返回 描述
GetUserTimeline() twitter.Status 对象的列表 获得一个用户的所有 tweet
GetFriends() twitter.User 对象的列表 获得追随者列表
PostUpdate() 单一一个 twitter.Status 发布一个 tweet

  加入 jQuery

  准确来讲,我们所使用的不仅仅是 jQuery 内核,还有 jQuery UI,它提供了小部件、主题和动画。转向 ThemeRoller 页面,在左侧的面板中,单击 Gallery 选项卡。选择自己喜欢的一个主题(我为这个示例应用程序使用了 Cupertino),然后单击主题名下面的 Download。这么做会链接到实际的下载页面;选择当前(稳定)版本,在作者写作本文之时,jQuery V1.3+ 的版本是 1.7.2。

  这里没有安装过程;只需解压缩 ThemeRoller 文件并在正确的地方放置正确的目录/文件。如果愿意,还可以自己创建主题,但为了简便起见,我使用的是预先已有的一个主题。

  创建 Django 项目

  接下来,需要创建一个新的 Django 项目。使用命令 django-admin startproject pytweetproj,其中 pytweetproj 是本文中为此项目使用的名称。也可以使用别的名称,但一定要在项目中自始至终使用该名称。更改到 pytweetproj 目录。为了启动 Django Web 服务器,在命令行键入 python manage.py runserver,打开一个 Web 浏览器,并导航到 http://127.0.0.1:8000。应该会得到一个页面,提示说 “It worked!”。如果在任何时候想要停止或重启这个服务器,可以按 Ctrl+C 来终止这个过程。不要将开发服务器用于生产。在完成了项目的开发之后,应该转移到一个安全的生产服务器,比如 Apache。

  在 root 项目目录,创建一个名为 resources 的子目录,内含 CSS 文件、JavaScript 文件等。从解压之前下载的 ThemeRoller 文件的地方,将 css 和 js 目录(解压缩自 ThemeRoller ZIP 文件)以及 jQuery 内核移动或复制到 resources 目录。

  利用自己喜欢的文本编辑器,打开 settings.py 文件并改变它来匹配清单 4 内所示的设置。


清单 4. Django 设置
# Django settings for pytweetproj project. 
import os 
APPLICATION_DIR = os.path.dirname( globals()[ '__file__' ] ) 
 
DEBUG = True 
TEMPLATE_DEBUG = DEBUG 
 
ADMINS = ( 
) 
 
MANAGERS = ADMINS 
 
# Not important to change this, we're not using any databases 
DATABASE_ENGINE = ''      
DATABASE_NAME = ''       
DATABASE_USER = ''       
DATABASE_PASSWORD = ''     
DATABASE_HOST = ''       
DATABASE_PORT = ''       
 
TIME_ZONE = 'America/Chicago' 
LANGUAGE_CODE = 'en-us' 
 
SITE_ID = 1 
 
# if you won't be using internationalization, better to keep 
# it false for speed 
USE_I18N = False 
 
MEDIA_ROOT = os.path.join( APPLICATION_DIR, 'resources' ) 
MEDIA_URL = 'http://localhost:8000/resources/' 
ADMIN_MEDIA_PREFIX = '/media/' 
 
# Make this unique, and don't share it with anybody. 
SECRET_KEY = '=y^moj{GetProperty(Content)}yfgwy2kc7^oexnl-f6(b#rkvvhq6c-ckks9_c#$35' 
 
# List of callables that know how to import templates from various sources. 
TEMPLATE_LOADERS = ( 
  'django.template.loaders.filesystem.load_template_source', 
  'django.template.loaders.app_directories.load_template_source', 
#   'django.template.loaders.eggs.load_template_source', 
) 
 
MIDDLEWARE_CLASSES = ( 
  'django.middleware.common.CommonMiddleware', 
  'django.contrib.sessions.middleware.SessionMiddleware', 
  'django.contrib.auth.middleware.AuthenticationMiddleware', 
) 
 
ROOT_URLCONF = 'pytweetproj.urls' 
 
TEMPLATE_DIRS = ( 
   os.path.join( APPLICATION_DIR, 'templates' ), 
) 
 
INSTALLED_APPS = ( 
  'django.contrib.auth', 
  'django.contrib.contenttypes', 
  'django.contrib.sessions', 
  'django.contrib.sites', 
  'twitterPanel', 
) 
 
# added for sessions 
SESSION_ENGINE = 'django.contrib.sessions.backends.file' 

  若要以独立于操作系统的方式获得当前的工作目录,可以使用 os.path.dirname( globals()[ '__file__' ] ) 设置应用程序目录。可以使用相同的方法设置 resources 目录的路径,以及 TEMPLATE_DIR。此外,还需要将 MEDIA_URL 设置为 http://localhost:8000/resources/。

  由于我们不使用数据库,所以无需设置任何相关的变量,但仍需设置 ROOT_URLCONF。注意到在 INSTALLED_APPS 内,有一个名为 twitterPanel 的值还未创建。我们接下来将要创建该 Django 应用程序。

  要创建这个 twitterPanel 应用程序,可以使用 django-admin startapp twitterPanel 并键入 cd 以切换到最新创建的模块目录:twitterPanel。在这个 twitterPanel 目录,创建另一个目录,名为 templates,内含 Django 模板。

  打造 URL

  用自己喜欢的文本编辑器,打开项目根内的文件 url.py 并参照清单 5 更改代码。这个文件将 URL 映射到回调函数。


清单 5. Root URL 设置
from django.conf.urls.defaults import * 
from django.conf import settings 
 
urlpatterns = patterns('', 
  ( r'^resources/(?P<path>.*)


« 
» 

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3