Статьи

Silverlight и PHP: Часть 2. Создание простого клиента Twitter

В моей предыдущей статье я говорил о том, как создать простой веб-сервис на PHP и использовать этот сервис из Silverlight . В этой статье будут использованы концепции этой статьи для создания очень простого клиента Twitter в Silverlight.

За последние несколько лет такие сервисы, как Twitter, стали очень популярными не только из-за ориентации на потребителя, но и потому, что они открывают свои API для разработчиков. Twitter, например, предоставляет много данных через RSS и каналы ATOM, поэтому загрузка данных так же проста, как и хорошо структурированный URL-вызов. Затем Silverlight может обрабатывать этот канал и извлекать из него содержимое (в данном случае, твиты).

Приложение, которое мы создадим в этой статье, позволит вам ввести поисковый запрос в Твиттере и отобразить твиты, полученные в Silverlight. К сожалению, этот процесс не так прост, как загрузка URL-адреса из Silverlight, из-за того, что называется политикой междоменного доступа.

Прежде чем мы начнем, настоятельно рекомендуем вам прочитать мою предыдущую статью о PHP-сервисах и Silverlight, потому что основная информация, которую я рассмотрел, является предпосылкой для того, что мы обсудим здесь.

На этот раз у нас есть статья-викторина, спонсируемая Microsoft, чтобы проверить ваши знания, когда вы закончите.

Silverlight и другие технологии RIA, такие как Adobe Flash, ограничены в доступе к данным из своего домена происхождения.

Например, если вы размещаете свое приложение Silverlight по адресу http://www.mysite.com Однако, если вы попытаетесь загрузить что-то с http://www.yoursite.com

Одним из способов обойти это ограничение является размещение файла clientaccesspolicy.xml в корне вашего сайта. Silverlight будет искать этот файл, и если он присутствует (и если он имеет правильные настройки), Silverlight получит разрешение на доступ к URL-адресам на другом сервере. Обратите внимание, что изображения и другие носители не подпадают под это ограничение. Это то же самое ограничение, которое применяется к JavaScript в браузере. Для получения дополнительной информации о междоменном доступе в Silverlight см. Http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx .

В моей предыдущей статье я описал, как настроить веб-сервис на PHP. Все шаги, которые необходимо выполнить для настройки этой службы PHP, одинаковы, с некоторыми изменениями в файле WSDL (язык описания веб-службы) и файле службы PHP. Кроме того, файл index.php

Начните с создания нового файла для хранения WSDL нового веб-сервиса, который называется twitterSearchService.wsdl Это файл, который PHP использует для настройки предоставляемой службы. Он также используется Visual Studio для создания классов для доступа к сервису.

Файл должен иметь следующее содержимое (если ваша служба находится в каталоге с именем php

Пример 1. php/twitterSearchService.wsdl

  <wsdl: определений xmlns = "http://schemas.xmlsoap.org/wsdl/" xmlns: soap = "http://schemas.xmlsoap.org/wsdl/soap/" xmlns: SOAP-ENC = "http: / /schemas.xmlsoap.org/soap/encoding/ "xmlns: wsdl =" http://schemas.xmlsoap.org/wsdl/ "xmlns: xsd =" http://www.w3.org/2001/XMLSchema "xmlns : tns = "http://schema.example.com" targetNamespace = "http://schema.example.com"> <wsdl: types> <xsd: schema targetNamespace = "http://schema.example.com" /> </ wsdl: types> <message name = "getTwitterSearchRequest"> <part name = "searchText" type = "xsd: string" /> <part name = "lastTwitterId" type = "xsd: string" /> </ message> <message name = "getTwitterSearchResponse"> <part name = "getTwitterSearchReturn" type = "xsd: string" /> </ message> <wsdl: portType name = "twitterSearchServicePortType"> <wsdl: operation name = "getTwitterSearch"> <wsdl: input message = "tns: getTwitterSearchRequest" /> <wsdl: output message = "tns: getTwitterSearchResponse" /> </ wsdl: operation> </ wsdl: portType> <binding name = "twitterSearchServiceBinding" type = "tns: twitterSearchServicePortType "> <  soap: binding style = "document" transport = "http://schemas.xmlsoap.org/soap/http" /> <wsdl: имя операции = "getTwitterSearch"> <soap: операция soapAction = "urn: ageService / getTwitterSearch" style = "document" /> <wsdl: input> <soap: body use = "literal" /> </ wsdl: input> <wsdl: output> <soap: body use = "literal" /> </ wsdl: output > </ wsdl: operation> </ binding> <wsdl: service name = "twitterSearchService"> <wsdl: port name = "twitterSearchServicePort" binding = "tns: twitterSearchServiceBinding"> <soap: address location = "http: // localhost /php/twitterSearchService.php "/> </ wsdl: port> </ wsdl: service> </ wsdl: определения> 


Этот файл лишь немного отличается от WSDL, который использовался в моей предыдущей статье: имена изменились, в поисковый запрос был добавлен второй параметр, а тип возвращаемого ответа был изменен с целого на строку.

Затем создайте второй файл с именем twitterSearchService.php Вы заметите, что файл WSDL ссылается на это имя файла.

Начнем с настройки файла PHP для предоставления веб-сервиса. Внутри тегов <?php


Как и в предыдущей статье, этот код загружает файл WSDL и добавляет указатель на функцию getTwitterSearch

Имея это в виду, вам нужно создать новую функцию с именем getTwitterSearch

Над кодом, который вы только что вставили в свой файл, создайте новую функцию getTwitterSearchsearchText и lastTwitterId . Эти параметры будут объединены в URL для доступа к API поиска Twitter. Хотя searchText довольно очевиден, lastTwitterId может и не быть. Он используется для указания поиска только для тех твитов, которые были опубликованы с момента последнего твита в предыдущем поиске. Это предотвращает возврат тех же твитов при последующих поисках.


Код для функции довольно прост:


Во-первых, текст поиска объединяется с URL-адресом базы поиска Twitter с помощью параметра q Если $lastTwitterIdsince_id Параметр $lastTwitterId

Затем вызывается функция PHP file_get_contentsfile_get_contents Затем результат возвращается клиенту Silverlight. И это все: работа PHP завершена. Так просто!