Северенс Ч. - Введение в программирование на Python - 2016. Введение в программирование на Python Ч. Северенс М. Национальный Открытый Университет "интуит", 2016
Метод f i n da 11 извлекает из документа, представленного в виде ХМL-дерева, список поддеревьев, корни которых являются узлами, соотве тствующими тегу нser. Затем мы используем цикл f о r, который для каждого узла нser печатает имя пользователя (имя содержится в узле паше, который является непосредственным потомком узла нser) и иденти фикатор (узел id), а также значение атрибутах узла нser. User count: 2 Nаше Cl1llck Id 001
Attrihнte 2 Nаше Breпt Id 009
Attrihнte 7
Интерфейсы прикладного программирования (API
Application Programming Interface)
Протокол передачи гипертекста НТТР делает возможным обмен данными между приложениями, а язык XML дает способ представления сложных данных, пересылаемых приложениями. Следующим шагом является определение и документи рование "конт рактов", заключаемых между приложениями. Общее название для подобных контрактов - Интерфейсы прикладного программирования (Application Prograшшing Iпterfaces), или просто API. Когда мы испо льзуем API, то в общем случае одна программа предоставляет набор сервисов, доступных другим программам для использования, и публикует API (т.е. правила), которые нужно соблюдать, чтобы воспользоваться этими сервисами. Подход, когда мы
разрабатываем программы, функционирование которых включает доступ к сервис ам, предоставляемым другими программами, называется Сервисно-ориентированной архитектурой (Service-Orieпted Architecture) или SOA.
При использовании SOA приложение при своей работе пользуется сервис ами других приложений. Без использования SOA приложение представляет собой отдельную (staпd-aloпe) программу, содержащую вн утри себя весь код, который необходим для ее работы. Мы встречаем множество примеров SOA, когда используем сеть. Можно войти на единый веб-сайт и заказать там авиабилеты, забронировать отель и арендовать автомобиль. Данные по отелям не хранятся на компьютерах, отвечающих за авиаперевозки. Вместо этого компьютеры авиалиний связываются с компьютерами отелей, получают от них необходимые данные и представляют их пользователю. Если пользователь согласен сделать заказ отеля через сайт авиалиний, последний используетдругой сетевой сервис, предоставляемый системой, отвечающей за отели, чтобы выполнить реальный заказ отеля. И в тот момент, когда с вашей кредитной карты снимаются деньги за всю транзакцию целиком, другие компьютеры также вовлечены в этот процесс.
API API AP'I Сервис-ориентированная архитектура имеет множество преимуществ, включая следующие: (1) мы всегда храним лишь одну копию данных - это особенно важно при совершении таких действий, как бронирование отеля, когда важно не сделать заказ дважды; (2) собственники данных могут установить правила их использования. При этом SОА-системы должны быть тщательно разработаны, чтобы обеспечивать хорошую производительность и удовлетворять потребностям пользователей. Когда приложение предос тавля ет через сеть набор услуг согласно своему API, мы называем это веб-службой. Веб-службы Твиттера
Возможно, вы знакомы с сайтом Twitter и его приложениями ссылка: http-J/ www.twitter.com. У Твиттера есть уникальный подход к его АРl /веб-сл ужбам, в которых все данные доступны приложениям, не относящимся к Твиттеру, с помощью Твиттер-АРI. Так как Твиттер очень либерален в отношении доступа к своим данным, он позволил тысячам разработчиков программного обеспечения создавать собственные приложения, основанные на программном обеспечении Твиттера. Эти дополнительные приложения увеличивают значение Твиттера, делая его намного большим, чем просто веб-сайт. Веб-службы Твиттера позволяют создавать новые приложения, о которых команда Твиттера даже и не задумывалась. По статистике, более 90 процентов обращений к Твиттеру происходит через API (т.е. не через веб-интерфейс сайта ссылка: twitter.com). Документацию API Твиттера можно просмотреть по ссылке: ссылка: http-J/ap iwiki twitter.com/. API Твиттера является примером типа RЕSТ- стиля1) организации веб служб. Например, используем Твиттер-АРI для извлечения списка пользователей-друзей и их статусов. Чтобы посмотреть список друзей пользователя drchuck, перейдем по ссылке ссылка: http-J/api twitter.coш/1 /statuses/friends/drchuck.xml Не всякий браузер корректно отображает XML. Однако всегда можно увидеть возвращаемый Твиттером ХМL-текст, посмотрев исходный код полученной ''веб-страницы". Получить этот ХМL-код можно и с помощью Питона, испо льзуя библиотеку ur 1 1 i b : import urllib
ТWIТТER_URL = 'http-J/a pi twitter.com/1/sta tuses/friends/ACCT. xml' wlille True:
Программа запрапmвает название учетной запи си Твиттера и, используя Твитге р-АР I, открыв ает URL, содержащую список друзей и их статус, получает текст URL и печата ет первые 250 символов текста. pythoп twitterl .py Eпter Twitter Acco Lmt:drchuck
Software developiпg, best practiciпg,agile е Eпter Twitter Acco Lmt:
В этом приложении мы получаем из сети ХМL-код точно так же, как и НТМL-страниц у. Е сли необходимо изв лечь данны е из XML, можно было бы использовать строковые функции Питона , но это непросто, поскольку требует погружени я в детали XML. Извлеченный ХМL-код мож ет в ыглядеть примерно так:
115636613
<пame>Steve Со ррiппаmе>
steve _copp iп
Кепt, UK
10174607039
web
17428929
davidkocher
davidkocher
Bern<Лoca tion>
10306231257
@MikeGrace If possilile please post а detailed Ьнg repor t
Верхний тег - "users", он включает в себя несколько тегов "user", которые являются его потомками. Тег "status", в свою очередь, является потомком каждого тега "t1ser".
Обработка ХМL-данных, полученных с помощью
API После получения правильно структурированных ХМL-данных с помощью API мы обычно используем ХМL-парсер, такой, как El e me n t Tr e e , для извлечения информации из XML. В приведенной ниже программе мы получаем список друзей и их статусы, пользуясь API Твиттера, и затем разбираем возв ращенный ХМL-код, чтобы напечатать первых четырех друзей и их статус. import urllib
import xml.etree.ElementTreeas ЕТ
ТWIТТЕR_URL = 'http-J/а pi twi tter.com/1/sta tuses/friends/АСCT.xml' wblle True:
С помощью метода f i nda 11 мы получаем список узлов с тегом user и затем переби раем элементы списка в цикле f оr . Для каждого узла user мы извлекаем и печатаем текст сыновнего узла screeп_naшe и затем извлекаем сыновний узел status. Если последний существует, то мы печатаем первые 50 символов содержащегося в нем текста. Идея программы проста и понятна, мы используем методы f i nda 1 1 и f i n d для извлечения либо списка узлов, либо одного узла и затем в случае, когда узел представляет сложный элемент с множеством подчиненных узлов, мы погружаемся глубже по дереву до тех пор, пока не находим интересующий нас текстовый элемент. Выполнив программу, получим: pyilion twitter2 .py
Enter Twitter Acco uпt:drchпck
Retrieviпg http-J/а pi twitter.com/Vsta tuses/frieпds/drchuck. xшl Retrieved 193310 characters. steve_coppiп
Lookiпg forward to sоше "oh110 the шarkets closed, davidkocher
@MikeGrace If possiЬle please post а detailed bug
hrhen1gold
From today's ColumЬia Journalism Review, оп crap d huge_idea
@drchuck#спх2010 misses you, too. Тlшжs for со Eпter Twitter Acco uпt:1l rhen1gold
Retrieviпg l1ttp-J/а pi twitter.com/Vstat uses/frieпds/hrhemgold.xml Retrieved 208081 characters.
Код для разбора ХМL и извлечения нужных полей с помощью библиотеки El e me n t Tr e e составляет всего несколько строк, это намного проще, чем использование строковых методов Питона для решения аналогичной задачи.
Глоссарий
API: Интерфейс прикладного программирования (Application Program Iпterface) - соглашение между приложениями, которое устанавли вает правила взаимодействия между двумя компонентами приложений. ElementTree: встроенная библиотека Питон, используемая для разбора ХМL-данных. ХМL: Расширяемый язык разметки (eXtensiЬle Markup Language) - формат для представления структурированных данных. REST: сокращение от REpresentational State Transfer (передача представления состояния) стиль построения сетевых служб, обеспечивающий доступ к сетевы м ресурсам с помощью протокола НТТР. С его помощью по сети передается документ, представляющий
текущее состояние ресурса. SOA: Сервис-ориентированная архитектура (Service Oriented Architectнre)
когда приложение состоит из компонентов взаимодействующих через сеть.