Похоже, что в наши дни Twiiter можно обнаружить где угодно. Политики, актеры, наши родители – все пользуются ресурсами социальных сетей. Клиенты требуют приложений, которые не только позволяют пользоваться Twitter, но и имеют глянцевый вид в стиле Web 2.0, которого можно добиться только с помощью Ajax. Нам в этом помогут Django и jQuery.
Рисунок 1. Панель Twitter, показывающая последние записи
Прежде чем приступать к работе с этой статьей, я настоятельно рекомендую вам проработать учебное руководство по Django. Также вы должны иметь уверенные знания JavaScript. Разумеется, у вас должна быть учетная запись Twitter, и вы должны знать его жаргон, например, что такое твит. В арсенале ваших инструментов должны быть Python, Django, jQuery и библиотека pyhon-twitter. В разделе Ресурсы приведены ссылки, по которым их можно загрузить.
Также нам понадобится включенная в Python база данных sqlite3 для хранения данных о сеансах, а о сохранении остальных данных позаботится инфраструктура Twitter. Конечно же, в дальнейшем для улучшения приложения можно будет интегрировать более сложную структуру базы данных для хранения на вашем сервере статистики, копий твитов и любой другой информации, связанной с вашей учетной записью Twitter. Также в этой статье предполагается, что вы работаете на Linux®.
Я проверял данное приложение с Python 2.5.2. По умолчанию Python установлен на большинстве Linux-машин, однако если Python у вас все же отсутствует, то в разделе Ресурсы можно найти информацию по его загрузке и установке.
Twitter позволяет получать данные с помощью двух API-интерфейсов: API поиска и REST API. (На сайте Twitter в разделе FAQ упоминается о планах по созданию единого API). REST Web-сервисом называется Web-сервис, реализованный на протоколе http и следующий принципам архитектуры REST (см. информацию в разделе Ресурсы).
Устанавливаем библиотеку python-twitter
Последний компонент, который нам нужен - это библиотека python-twitter. Согласно сайту проекта, она представляет собой "оберточную библиотеку python, основанную на API Twitter и модели данных twitter". Существует несколько библиотек, позволяющих взаимодействовать с сервисами Twitter во множестве языков - от Ruby до Eiffel. В настоящий момент в Python имеется 5 библиотек для взаимодействия с Twitter: Python-twitter Де Витта Клинтона (DeWitt Clinton), python-twyt Эндрю Прайса (Andrew Price), twitty-twister Дастина Сэллингса (Dustin Sallings), twython Райана Макграта (Ryan McGrath) и Tweepy Джоша Росслейна (Josh Roesslein).
Библиотеке python-twitter для работы нужен пакет 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 - мощную инфраструктуру разработки Web-приложений на Python. В описываемом в данной статье приложении я работал с Django версии 1.1.1. Установка Django так же проста, как установка simplejson и python-twitter. Загрузите пакет и выполните в терминале команды, показанные в листинге 3.
Листинг 3. Команды для установки Django
tar -zxvf Django-1.1.1.tar.gz cd Django-1.1.1 sudo python setup.py build sudo python setup.py install |
Проверьте, что путь к Django есть в вашей переменной path, для чего выполните команду
$ django-admin --version.
Если все прошло как ожидалось, то можно взяться за написание кода.
Установив библиотеку python-twitter, можно приступить к изучению ее возможностей.
Чтобы получить доступ к библиотеке, выполните команду import twitter.
Модуль twitter
предоставляет обертки для модели данных
Twitter и его API. В нем имеется три класса моделей данных:
twitter.Status, twitter.User и
twitter.DirectMessage.
Все вызовы API возвращают объект одного из этих классов.
Для работы с API следует создать экземпляр класса
twitter.Api() (обратите внимание, что первая буква - заглавная).
Если создать экземпляр этого класса, не передавая в конструктор никаких параметров, то
можно будет вызывать только методы, которые не требуют входа в систему. Чтобы войти в систему и получить
полный доступ к API, используйте следующий синтаксис:
import twitter api = twitter.Api(username='yourUserName', password='yourPassword') |
Имея экземпляр класса Api,
можно запрашивать ваших фолловеров (пользователей, которые читают ваши твиты), пользователей, твиты которых читаете вы,
получать статусы (твиты), можно
посылать твиты и т.д. Например, чтобы получить список твитов пользователя, сделайте вызов
statuses = api.GetUserTimeline(),
который вернет список объектов
twitter.Status.
Чтобы создать список с текстом (строками) ваших твитов, можно использовать следующее выражение:
>>>print [s.text for s in statuses].
В таблице 1 перечислены классы и методы, которые мы будем использовать в нашем Web-приложении.
С полной документацией можно ознакомиться через pydoc, например — $ pydoc twitter.Api,
или на web-странице документации
python-twitter (см. Ресурсы).
Таблица 1. Некоторые полезные методы API, доступные в python-twitter
| Метод | Возвращаемое значение | Описание |
|---|---|---|
GetUserTimeline() | Список объектов twitter.Status | Запрашивает все твиты пользователя |
GetFriends() | Список объектов twitter.User | Запрашивает список фолловеров (пользователей, читающих ваши твиты) |
PostUpdate() | Объект класса twitter.Status | Публикует твит |
Следует уточнить, что мы будем использовать не только ядро jQuery, но и библиотеку jQuery UI, предоставляющую виджеты, темы и анимацию. Посетите страницу ThemeRoller и на панели слева нажмите на вкладку Gallery (Галерея). Выберите тему, которая вам нравится (я в этом приложении использовал тему Cupertino) и перейдите по ссылке Download, находящейся под именем темы. Вы попадете на страницу загрузки. Выберите на ней текущую (стабильную) версию. На момент написания статьи это была версия 1.7.2 для jQuery 1.3+.
Процесса установки как такового нет, просто извлеките файл ThemeRoller и поместите нужные директории/файлы в нужное место. Также при желании можно создать новую тему, но я в этом примере ограничился использованием одной из готовых тем.
Теперь нужно создать новый проект Django. Это делается с помощью команды
django-admin startproject pytweetproj, где
pytweetproj
– это имя проекта, используемое в этой статье. Вы можете указать любое другое имя,
однако в таком случае следите за тем, чтобы везде дальше по ходу статьи использовать именно
его.
Перейдите в директорию pytweetproj. Чтобы запустить web-сервер Django, выполните в терминале команду
python manage.py runserver,
запустите Web-браузер и перейдите по адресу http://127.0.0.1:8000. Вы увидите страницу с надписью «It worked!».
Если вы в какой-либо момент захотите остановить или перезапустить сервер, нажмите
Ctrl+C,
чтобы завершить его процесс. Не используйте сервер разработки в рабочей среде.
Завершив разработку проекта, перенесите его на надежный и безопасный сервер, например, Apache.
Создайте в корневой директории проекта поддиректорию с именем resources, в которой мы будем хранить CSS-файлы, сценарии JavaScript и прочие медиа-файлы. Скопируйте сюда директории css и js, извлеченные из ZIP-архива ThemeRoller, а также ядро jQuery.
Откройте в своем любимом текстовом редакторе файл settings.py и поменяйте его согласно листингу 4.
Листинг 4. Настройки проекта Django
# Настройки Django для проекта pytweetproj.
import os
APPLICATION_DIR = os.path.dirname( globals()[ '__file__' ] )
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
)
MANAGERS = ADMINS
# для кэширования мы будем использовать базу данных sqlite3
DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = 'session.db'
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''
TIME_ZONE = 'America/Chicago'
LANGUAGE_CODE = 'en-us'
SITE_ID = 1
# если вы не будете пользоваться возможностями интернационализации, то для скорости
# работы лучше оставить этому параметру значение false
USE_I18N = False
MEDIA_ROOT = os.path.join( APPLICATION_DIR, 'resources' )
MEDIA_URL = 'http://localhost:8000/resources/'
ADMIN_MEDIA_PREFIX = '/media/'
# Сделайте этот ключ уникальным и никому его не показывайте.
SECRET_KEY = '=y^moj$+yfgwy2kc7^oexnl-f6(b#rkvvhq6c-ckks9_c#$35'
# Список загрузчиков шаблонов, которые могут импортировать шаблоны из различных
# источников.
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',
)
# добавим это для сессий
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
|
При задании директории приложения используйте вызов
os.path.dirname( globals()[ '__file__' ] ),
который возвращает путь к текущей рабочей директории и работает на всех операционных системах. С помощью этого вызова задайте путь к директории ресурсов, а также TEMPLATE_DIR. Также необходимо задать переменной MEDIA_URL значение http://localhost:8000/resources/.
Мы будем использовать базу данных sqlite3, по умолчанию включенную в Python. Также необходимо задать переменные DATABASE_ENGINE, DATABASE_NAME и ROOT_URLCONF. Обратите внимание, что в переменной INSTALLED_APPS, в которой перечисляются установленные приложения, указано еще не созданное приложение
twitterPanel.
Мы создадим это приложение чуть позже. А пока выполним команду
python manage.py syncdb
чтобы создать базу данных для session.db.
Выполните команду django-admin startapp twitterPanel чтобы
создать приложение
twitterPanel,
после чего перейдите в только что созданную директорию twitterPanel.
В директории twitterPanel создайте директорию с именем templates, в которой мы будем хранить шаблоны Django.
Откройте в своем любимом текстовом редакторе файл url.py, находящийся в корневой директории проекта и поменяйте код в соответствии с листингом 5. В этом файле шаблонам адресов URL ставятся в соответствие функции обратного вызова.
Листинг 5. Настраиваем корневые адреса URL
from django.conf.urls.defaults import *
from django.conf import settings
urlpatterns = patterns('',
( r'^resources/(?P<path>.*)$',
'django.views.static.serve',
{ 'document_root': settings.MEDIA_ROOT } ),
( r'^twitterPanel/', include( 'twitterPanel.urls' ) ),
)
|
Первый элемент
urlpatterns
определяет, как будут обрабатываться статические ресурсы или медиа-файлы – например изображения.
Поскольку мы используем сервер разработки Django, для обслуживания статических данных мы будем использовать представление
django.views.static.serve().
Второй элемент urlpatterns
подключает шаблоны URL, найденные в приложении
twitterPanel.
Откройте файл url.py, находящийся в директории twitterPanel (не путайте его с файлом url.py,
находящимся в корне проекта) и добавьте в него код, показанный в листинге 6.
Листинг 6. URL адреса приложения twitterPanel
from django.conf.urls.defaults import *
from twitterPanel.views import *
urlpatterns = patterns( '',
url( r'^$', index, name = 'twitterPanel_index' ),
url( r'^panel/$', panel, name = 'twitterPanel_panel' ),
url( r'^update/$', update, name = 'twitterPanel_update' ),
)
|
Мы создадим только три представления: index, panel и update. Обратите внимание, что мы будем добавлять представления не в корень проекта, а в приложение twitterPanel. Откройте файл views.py, находящийся в директории twitterPanel, и добавьте в начало файла инструкции импорта, указанные в листинге 7:
Листинг 7. Инструкции импорта в файле представлений приложения twitterPanel
from django.shortcuts import render_to_response from django.template.context import RequestContext import twitter |
Метод Django
render_to_response()
отображает шаблон с определенным контекстом и возвращает объект
класса
HttpResponse.
RequestContext
- это контекст Django, немного отличающийся от обычного
контекста django.template.Context,
а именно, он принимает объект класса
HttpRequest
и автоматически заполняет контекст переменными, найденными в параметре
TEMPLATE_CONTEXT_PROCESSORS.
Первый метод представления – index() -
должен выглядеть так, как показано в листинге 8.
Листинг 8. Представление
index
def index(request):
template = 'index.html'
userName = request.POST.get( 'userTxt' )
password = request.POST.get( 'passwordTxt' )
if userName is not None and password is not None:
try:
api = twitter.Api( username = userName, password = password)
# запрашиваем 5 первых твитов
statuses = api.GetUserTimeline()[0:5]
# получаем 120 первых друзей
following = api.GetFriends()[0:120]
except NameError, e:
print "unable to login"
else:
statuses = {}
following = False
# помещаем данные в сессию
request.session['statuses'] = statuses
request.session['following'] = following
request.session['userName'] = userName
request.session['password'] = password
data = {
'statuses' : statuses,
'following' : following,
}
return render_to_response(template, data,
context_instance = RequestContext(request))
|
Шаблон index.html еще не написан.
Сейчас мы пока просто запомним, что у нас есть два HTML-элемента:
поля для ввода имени пользователя и пароля. Данные посылаются в представление с помощью метода
POST.
Если имя пользователя и пароль введены, мы создаем объект класса
twitter.Api
и извлекаем для этого пользователя первые 5 твитов и первых 120 пользователей, за твитами которых он следит.
Статусы, друзья, имя пользователя и пароль сохраняются в сеансе, чтобы к ним можно было обратиться в других частях нашей программы.
Второй метод представления - panel() -
намного короче. Он показан в листинге 9.
Листинг 9. Представление
panel
def panel(request):
template = 'panel.html'
data = {
'statuses' : request.session['statuses'],
'following' : request.session['following']
}
return render_to_response(template, data,
context_instance = RequestContext(request))
|
Здесь мы используем шаблон panel.html, которого также еще нет. После входа пользователя все действия происходят именно в этом представлении.
Именно здесь отображаются твиты, друзья и выполняются обновления. Чуть позже мы расскажем об этом подробнее.
В настоящий момент все, что мы здесь делаем - это получаем из сеанса некоторые данные
и вызываем метод
render_and_response.
Третий метод представления - update - напротив, немного сложнее.
Взгляните на листинг 10:
Листинг 10. Представление update
def update(request):
template = 'panel.html'
userName = request.session['userName']
password = request.session['password']
try:
api = twitter.Api( username = request.session['userName'],
password = request.session['password'])
api.PostUpdate(request.POST.get('updateTextArea'))
updated = True
statuses = api.GetUserTimeline()[0:5] # перезагружаем статусы
except NameError, e:
print "unable to login"
updated = False
data = {
'userName' : request.session['userName'],
'password' : request.session['password'],
'updated' : updated,
'statuses' : statuses
}
return render_to_response(template, data,
context_instance = RequestContext(request))
|
Имя пользователя и пароль извлекаются из сеанса и используются для создания еще одного объекта
twitter.Api,
который используется для отправки обновления. После этого производится перезагрузка статусов.
В директории twitterPanel/templates создайте файл index.html. Откройте этот файл и поместите в него код, показанный в листинге 11.
Листинг 11. Шаблон index
<html>
<head>
<title>Sample Python-Twitter Application</title>
<link type="text/css"
href="{{MEDIA_URL}}css/cupertino/jquery-ui-1.7.2.custom.css"
rel="stylesheet" />
<script type="text/javascript"
src="{{MEDIA_URL}}js/jquery-1.3.2.min.js"></script>
<script type="text/javascript"
src="{{MEDIA_URL}}js/jquery-ui-1.7.2.custom.min.js"></script>
<script type="text/javascript">
$(function(){
// Диалог
$('#dialog').dialog({
autoOpen: false,
width: 400,
buttons: {
"Ok": function() {
$(this).dialog("close");
$.post('{% url twitterPanel_index %}', $("#loginForm").serialize());
$( '#panel' ).html( ' ' ).load( '{% url twitterPanel_panel %}' )
$( '#dialog_link' ).fadeOut(1500);
$( '#demoTitle' ).fadeOut(1500);
},
"Cancel": function() {
$(this).dialog("close");
}
}
});
// Ссылка на диалог
$('#dialog_link').click(function(){
$('#dialog').dialog('open');
return false;
});
//добавляем статическим виджетам "подвешенное" состояние
$('#dialog_link, ul#icons li').hover(
function() { $(this).addClass('ui-state-hover'); },
function() { $(this).removeClass('ui-state-hover'); }
);
});
</script>
<style type="text/css">
body{ font: 62.5% "Trebuchet MS", sans-serif; margin: 50px;}
.demoHeaders { margin-top: 2em; }
#dialog_link {padding: .4em 1em .4em 20px;
text-decoration:none; position: relative;}
#dialog_link span.ui-icon {
margin: 0 5px 0 0;position: absolute;
left: .2em;top: 50%;margin-top: -8px;}
ul#icons {margin: 0; padding: 0;}
ul#icons li {
margin: 2px; position: relative; padding: 4px 0;
cursor: pointer; float: left; list-style: none;}
ul#icons span.ui-icon {float: left; margin: 0 4px;}
</style>
</head>
<body>
<h2 id="demoTitle" class="demoHeaders">PyTwitter Demo</h2>
<p>
<a href="#" id="dialog_link" class="ui-state-default ui-corner-all">
<span class="ui-icon ui-icon-newwin"></span>Start Demo
</a>
</p>
<div style="position: relative; width: 96%; height: 200px; padding:1% 4%;
overflow:hidden;" class="fakewindowcontain">
</div>
<!-- диалог ввода имени пользователя и пароля -->
<div id="dialog" title="Login" >
<p>
<form action="#" name="loginForm" id="loginForm" method="POST">
<table>
<tr>
<td>user</td> <td><input type="text" name="userTxt" id="userTxt"/></td>
</tr>
<tr>
<td>password</td>
<td><input type="password" name="passwordTxt" id="passwordTxt"/></td>
</tr>
</table>
</form>
</p>
</div>
<!-- показываем только если пользователь вошел в систему -->
<!-- виджет Accordion -->
<div id="panel" style="position: absolute; top: 2%; left:2%;
width:600px; visibility:visible;">
</div>
</body>
</html>
|
На рисунке 2 показан вид нашего приложения при запуске: кнопка jQuery UI
Рисунок 2. кнопка jQuery UI
Эта кнопка вызывает окно Login, показанное на рисунке 3.
Рисунок 3. Окно Login
Давайте изучим код, показанный в листинге 11.
Сначала мы с помощью переменной {{MEDIA_URL}}
сообщаем браузеру о том, где находятся файлы CSS, JavaScript и jQuery.
При отображении шаблона Django подставляет вместо
{{MEDIA_URL}}
фактический путь к файлам.
Внутри заголовка добавим свой код JavaScript. Знак доллара ($)
– это сокращение, с помощью которого можно обратиться к экземпляру jQuery.
В jQuery краткая форма записи для
document.getElementById('name')
выглядит так:
$('#name').
Например, мы определяем элемент dialog из jQuery UI с помощью тега
<div>, а затем вызываем метод
.dialog()
для создания окна jQuery. Внутри этого окна мы помещаем кнопки OK и Cancel.
Кнопка Cancel
закрывает окно, а OK не просто закрывает окно, но и посылает данные на сервер.
Если данные, полученные представлением index, являются корректными именем пользователя и паролем,
приложение вернет данные о твитах и о читателях твитов данного пользователя.
После этого окно с кнопками исчезает и вместо него появляется панель Twitter.
Вся магия здесь заключена в строке $( '#panel' ).html( ' ' ).load( '{% url twitterPanel_panel
%}' ),
в которой загружается внешний шаблон Django с именем panel.html.
Панель Twitter представляет собой виджет accordion, входящий в библиотеку jQuery UI.
В листинге 12 показан код шаблона panel. Сохраните его в файле panel.html в директории twitterPanel/templates.
Листинг 12. Шаблон panel
<script type="text/javascript">
$(function(){
$("#main").accordion({
header: "h3",
autoHeight: true
})
.hide()
.fadeIn(1500);
$('#updateTextArea').keyup(function(){
// здесь text обозначает, сколько символов еще можно ввести.
// Var() - сколько символов уже введено
var tweetLength = $('#updateTextArea').val().length;
$('#charCount').text( 140 - tweetLength );
});
$('#updateBtn').click(function(){
if($('#updateTextArea').val().length <= 140){
// отсылаем данные из формы на сервер
$.post('{% url twitterPanel_update %}', $("#updateForm").serialize());
$("#updateStatus").text("last update: " + $('#updateTextArea').val());
// очищаем текстовое поле
$('#updateTextArea').val("");
// и сбрасываем счетчик
$('#charCount').text( "140" );
}
return false;
});
});
</script>
<div id="main">
<div>
<h3><a href="#">My Recent Tweets</a></h3>
<div>
{% if statuses %}
{% for s in statuses %}
<p style="border-top:1px dashed #f00; margin-top:1em;
padding-top:1em font: 80% 'Trebuchet MS', sans-serif;">
{{ s.text }}
</p>
{% endfor %}
{% else %}
No tweets found
{% endif %}
</div>
</div>
<div>
<h3><a href="#">Update Status</a></h3>
<div>
<form action="#" id="updateForm" name="updateForm" method="POST">
<textarea id="updateTextArea" name="updateTextArea" rows=2 cols=70 />
<button id="updateBtn" class="ui-state-default ui-corner-all">Update</button>
</form>
<div id="charCount" name="charCount" value=140>140</div>
<div id="updateStatus" name="updateStatus"><!-- update message here --></div>
</div>
</div>
<div>
<h3><a href="#">Following</a></h3>
<div>
{% if following %}
{% for f in following %}
<img src="{{ f.GetProfileImageUrl }}" width=28 height=28 />
{% endfor %}
{% else %}
following variable is empty
{% endif %}
</div>
</div>
</div>
|
На рисунке 4 показана панель Twitter с вкладкой Update Status.
Рисунок 4. Панель Twitter, показывающая вкладку Update Status
Дадим виджету accordion имя «main». Вся работа приложения после входа пользователя в систему происходит именно здесь. В этом виджете имеется 3 вкладки: My Recent Tweets, Update Status и Following, которые показаны на рисунке 5.
Рисунок 5. Панель Twitter, показывающая вкладку Following
На первой вкладке просто отображается 5 последних твитов. Если объект status не пустой,
Django проходит по всем объектам status и отображает соответствующий текст. В противном случае на этой вкладке
выводится сообщение "No tweets found".
На второй вкладке - Update Status - находится HTML-форма с текстовым полем и кнопкой. Под формой находятся 2 элемента
<div>:
один с именем
charCount, другой с именем
updateStatus.
Вкладке Update Status назначается событие onclick,
при котором проверяется, что длина введенного сообщения не превышает 140 символов, и,
если это так, введенный текст отправляется с помощью имеющегося в jQuery метода post
в представление update, которое выполняет остальную работу. После этого на данной странице отображаются последние твиты.
Ради интереса я также добавил JavaScript-код, подсчитывающий количество символов, которые еще можно ввести в твите. Как вы помните, Twitter ограничивает длину сообщения 140 символами. Этот код при каждом отпускании клавиши вычитает из 140 количество символов, введенных в поле update text, после чего обновляет счетчик символов на странице.
На третьей вкладке панели Twitter – Following в первую очередь проверяется, что объект
following
не пустой, и, если это так, то как и на вкладке My Recent Tweets, приложение в цикле обходит всех пользователей.
У каждого пользователя можно получить URL изображения, показываемого в профиле. Мы привяжем это значение к атрибуту
src
тега <image>.
В результате на третьей вкладке будут показаны все пользователи, за твитами которых вы следите.
Теперь, когда мы разложили все по своим местам, давайте запустим сервер Django и откроем URL http://127.0.0.1:8000/twitterPanel. Вы должны увидеть кнопку jQuery UI для входа в приложение. После того как вы нажмете эту кнопку и введете имя пользователя и пароль для twitter, должна появиться панель Twitter.
Теперь, когда вы познакомились с демо-приложением, вы наверняка оценили динамику и эффектность, придаваемую приложению библиотекой jQuery UI. В свою очередь Django облегчает работу с серверным кодом Python и шаблонами.
Данное приложение можно улучшить, добавив проверки в процесс регистрации, окна с сообщениями об ошибках, список пользователей, следящих за вашими твитами, посылку личных твитов, а также поиск твитов. Разумеется, возможности расширения приложения ограничены только вашим воображением.
| Описание | Имя | Размер | Метод загрузки |
|---|---|---|---|
| Пример кода | os-social-twitter-pytweetproj.zip | 160КБ | HTTP |
Научиться
- Ознакомьтесь с оригиналом статьи:
Build a Twitter Web application
(EN, developerWorks, ноябрь 2009 г.).
-
Узнайте о REST-архитектуре разработки приложений (EN).
-
Ознакомьтесь с документацией по API Twitter (EN),
чтобы узнать об этом API все, что вам нужно.
-
Следите за новостями в разделе технических мероприятий и Web-трансляций developerWorks.
-
Следите за developerWorks в Twitter.
-
Предстоящие конференции, выставки, сеансы Web-вещания и другие
события
во всем мире, интересные для разработчиков open source.(EN)
-
Бесплатные
демонстрации developerWorks по требованию
технологий и возможностей продуктов IBM и open source.(EN)
Получить продукты и технологии
-
Загрузите Python,
найдите документацию и проработайте обучающее руководство по Python. Затем загрузите библиотеку
python-twitter (EN).
-
Загрузите Django,
jQuery и jQuery UI (EN).
-
Обязательно загрузите simplejson (EN)
- пакет, необходимый для работы библиотеки python-twitter.
-
Разработайте ваш следующий проект с помощью
пробного ПО от IBM,
доступного для загрузки и на DVD.