Наша совместная команда Banwar.org

Связаться с нами

  • (097) ?601-88-87
    (067) ?493-44-27
    (096) ?830-00-01

Статьи

Работа с удаленным контентом

  1. Вступление
  2. Работа с разными типами контента
  3. Работа с текстом
  4. Работа с XML
  5. пример
  6. Работа с разными типами узлов
  7. Другие источники
  8. Работа с JSON
  9. Подробнее о JSON
  10. Установка типа авторизации
  11. методы
  12. ПОЛУЧИТЬ
  13. СООБЩЕНИЕ
  14. Обновление кеша

В этом документе описывается, как извлекать и обрабатывать удаленные текстовые (обычно HTML), XML и JSON данные с помощью функции makeRequest (). Функция makeRequest () - это всего лишь один из методов получения удаленных данных. Для обзора различных подходов, которые вы можете использовать, см. Руководство для разработчиков удаленных запросов данных ,

Вступление

Для обзора различных подходов, которые вы можете использовать для извлечения удаленных данных, см. Руководство для разработчиков удаленных запросов данных , Эта глава фокусируется только на одном подходе - функции makeRequest () API гаджетов.

API гаджетов обеспечивает makeRequest (url, callback, opt_params) функция для извлечения и работы с удаленным веб-контентом. Требуются следующие аргументы:

  • String url - URL-адрес, на котором расположен контент
  • Функция обратного вызова - функция для вызова с данными из URL после их получения
  • Map. <Gadgets.io.RequestParameters, Object> opt_params - дополнительные параметры для передачи в запрос.

Аргумент opt_params позволяет указать следующее:

  • Тип содержимого запроса (TEXT, XML и JSON)
  • Тип метода запроса (POST или GET)
  • Любые заголовки, которые вы хотите включить в запрос
  • Тип авторизации (NONE, SIGNED и OAUTH)

Примечание. Вы не можете использовать makeRequest () с тип = "URL" гаджеты.

Независимо от типа данных, которые они выбирают, вызовы makeRequest () имеют одинаковые характеристики:

  • Их первый параметр - это URL, который используется для извлечения удаленного контента.
  • Их второй параметр - это функция обратного вызова, которую вы используете для обработки возвращаемых данных.
  • Они асинхронны, что означает, что вся обработка должна происходить в функции обратного вызова. Обратный вызов - это функция, которая передается в качестве параметра (в форме ссылки на функцию) другой функции. Обратные вызовы дают сторонним разработчикам «крючок» в работающей среде для некоторой обработки.
  • У них нет возвращаемых значений, потому что они возвращаются немедленно, и связанные с ними функции обратного вызова вызываются всякий раз, когда возвращается ответ.

Например, рассмотрим следующий фрагмент кода, который извлекает удаленный контент как текст. Этот код выбирает HTML-текст веб-страницы google.com и отображает первые 400 символов:

function getHtml () {var params = {}; params [gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.TEXT; var url = "http://www.google.com"; gadgets.io.makeRequest (URL, ответ, параметры); }; function response (obj) {//obj.text содержит текст запрашиваемой страницы var str = obj.text; var html = str.substr (0,400); document.getElementById ('content_div'). innerHTML = html; }; gadgets.util.registerOnLoadHandler (getHtml);

Этот пример иллюстрирует основные принципы работы makeRequest ():

  1. Когда вызывается makeRequest (), API гаджетов отправляет асинхронный HTTP-запрос GET на URL-адрес, переданный в функцию (в этом примере URL-адрес http://www.google.com).
  2. makeRequest () сразу возвращается, а затем вызывает функцию обратного вызова позже (в этом примере она называется response ()), когда выборка заканчивается. Это означает, что вы должны поместить любой зависимый код в функцию обратного вызова или в функции, вызываемые функцией обратного вызова.
  3. makeRequest () возвращает объект JavaScript со следующей структурой:
{данные: <проанализированные данные, если применимо>, ошибки: <все ошибки, которые произошли>, текст: <необработанный текст ответа>}

Этот объект предоставляется в качестве единственного аргумента функции обратного вызова. Функция обратного вызова выполняет некоторые операции с возвращенными данными. Обычно он извлекает части данных, комбинирует их с разметкой HTML и отображает полученный HTML-код в гаджете.

Работа с разными типами контента

По умолчанию содержимое удаленного веб-сайта возвращается в виде текста. Вы можете использовать поле opt_params для установки типа содержимого возвращаемого содержимого одним из следующих:

  • ТЕКСТ - gadgets.io.ContentType.TEXT
  • DOM - gadgets.io.ContentType.DOM
  • КОРМИТЬ - gadgets.io.ContentType.FEED
  • JSON - gadgets.io.ContentType.JSON

Работа с текстом

Вот пример, который выбирает данные из файла CSV (значение, разделенное запятыми) и использует его для заполнения списка личных контактов. Он показывает, как вы устанавливаете тип содержимого извлекаемого содержимого в необязательных параметрах. В функции обратного вызова response (obj) текстовое значение извлекается из obj с использованием obj.text:

&lt;? xml version = "1.0&quot; encoding = "UTF-8"?> <Module> <ModulePrefs title = "Пример извлечения текста" /> <Content type = "html"> <! [CDATA [<div id = "content_div "> </ div> <script type =" text / javascript "> // В этом примере извлекаются данные из файла CSV, содержащего контактную информацию. В файле CSV // каждая запись состоит из имени, адреса электронной почты и номера телефона. function getContacts () {var params = {}; params [gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.TEXT; var url = "http://gadget-doc-examples.googlecode.com/svn/trunk/opensocial-gadgets/Contacts.csv"; gadgets.io.makeRequest (URL, ответ, параметры); }; // Функция обратного вызова для обработки функции ответа response (obj) {var responseText = obj.text; // Установить CSS для div. var html = "<div style = 'padding: 5px; цвет фона: #FFFFBF; семейство шрифтов: Arial, Helvetica;" + "text-align: left; font-size: 90% '>"; // Используем функцию split для извлечения подстрок, разделенных запятыми // разделителями. var contacts = responseText.split (","); // Обрабатываем массив извлеченных подстрок. for (var i = 0; i <contacts.length; i ++) {// Добавить подстроки в html. html + = contacts [i]; html + = ""; // Каждая запись состоит из 3 компонентов: имя, адрес электронной почты и // номер телефона. Гаджет отображает каждую запись в одной // строке: // // Микки Маус [email protected] 1-800-MYMOUSE // // Поэтому вставляем разрыв строки после каждого (имя, адрес электронной почты, телефон) // триплет (т.е. всякий раз, когда (i + 1) кратно 3). if ((i + 1)% 3 == 0) {html + = "<br>"; }} html + = "</ div>"; // Вывод html в div. document.getElementById ('content_div'). innerHTML = html; } gadgets.util.registerOnLoadHandler (getContacts); </ script>]]> </ Content> </ Module>

Работа с XML

Объектная модель документа (DOM) API для навигации по документам HTML и XML Вы можете использовать makeRequest () для извлечения XML-документа как объекта DOM. Получив объект, вы можете работать с ним, используя стандартные функции JavaScript DOM. Как правило, это означает извлечение нужных данных из файла XML, объединение их с разметкой HTML и CSS и отображение полученного HTML в вашем гаджете.

При использовании DOM веб-контент анализируется в виде дерева узлов. Например, рассмотрим следующий фрагмент HTML:

<a href="http://www.google.com/"> <b> быстрая </ b> домашняя страница Google. </a>

Этот фрагмент иллюстрирует основные типы узлов, обсуждаемые в этом разделе:

  • Элемент узлов. Узлами элемента в этом фрагменте являются «a» и «b». Узлы элементов являются строительными блоками, которые определяют структуру документа.
  • Текстовые узлы. Текстовые узлы в этом фрагменте - это «Google», «fast» и «home page». Текстовые узлы всегда содержатся внутри узловых элементов. Они являются дочерними узлами узла содержащего элемента.
  • Атрибуты узлов. Этот фрагмент имеет один атрибутный узел: href = 'http: //www.google.com'. Узел атрибута предоставляет дополнительную информацию о своем узле содержащего элемента. Однако атрибуты не считаются дочерними узлами элемента, который их содержит, что влияет на то, как вы работаете с ними. Для более подробного обсуждения этой темы см. Работа с разными типами узлов ,

Это структура DOM для фрагмента HTML:

Чтобы получить доступ к данным в DOM-объекте, вы «обходите дерево», используя функции DOM для навигации по отношениям родительского-дочернего узла, чтобы получить нужные данные.

пример

Следующий XML-файл содержит данные для серии блюд для завтрака. Самым верхним родительским узлом является меню, и он имеет несколько дочерних узлов питания. Узел меню также содержит узел атрибута: title = "Меню завтрака". У каждого пищевого узла есть имя, цена, описание и калорийные дочерние узлы.

Узлы имени, цены и калорий содержат свои собственные «текстовые» дочерние узлы. Каждый узел описания содержит дочерний узел CDATA. CDATA - это отдельный тип узла. Разделы CDATA используются для экранирования блоков текста, содержащих символы, которые в противном случае считались бы разметкой, например угловые скобки. Единственный разделитель, который распознается в разделе CDATA, - это строка «]]>», которая завершает раздел CDATA.

&lt;? xml version = "1.0&quot; encoding = "UTF-8"?> <menu title = "Меню завтрака"> <еда> <name> Ранний завтрак с птицами </ name> <цена> $ 3,95 </ цена> <описание> <! [CDATA [<div style = "color: purple; padding-left: 25px;"> Два яйца любого стиля на ваш выбор: бекон или колбаса, тосты или английский маффин. </ Div>]]]> </ description> <calories> 450 </ calories> </ food> <food> <name> бельгийские вафли с шоколадной стружкой </ name> <цена> 7,95 $ </ цена> <описание> <! [CDATA [<div style = "цвет: фиолетовый ; padding-left: 25px; "> Шоколадные чипсы Бельгийские вафли, покрытые шоколадным сиропом и взбитыми сливками. </ div>]]> </ description> <calories> 900 </ calories> </ food>… </ menu>

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

В следующем коде показано, как пройтись по дереву DOM для извлечения данных из разных типов узлов и как объединить данные с разметкой HTML и CSS для отображения в гаджете меню завтрака.

&lt;? xml version = "1.0&quot; encoding = "UTF-8"?> <Module> <ModulePrefs title = "Получить XML" scrolling = "true" /> <UserPref name = "mycalories" display_name = "Лимит калорий" default_value = "800" /> <UserPref name = "mychoice" display_name = "Показать описания" datatype = "bool" default_value = "false" /> <Content type = "html"> <! [CDATA [<div id = "content_div" > </ div> <script type = "text / javascript"> // получаем prefs var prefs = new gadgets.Prefs (); // Лимит калорий, установленный пользователем var calorieLimit = prefs.getString ("mycalories"); // Указывает, показывать ли описания в меню завтрака. Var description = prefs.getBool ("mychoice"); function makeDOMRequest () {var params = {}; params [gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.DOM; var url = "http://gadget-doc-examples.googlecode.com/svn/trunk/opensocial-gadgets/breakfast-data.xml"; gadgets.io.makeRequest (URL, ответ, параметры); }; function response (obj) {// Начать построение строки HTML, которая будет отображаться в <div>. // Устанавливаем стиль для <div>. var html = "<div style = 'padding: 5px; цвет фона: #ccf; семейство шрифтов: Arial, Helvetica;" + "text-align: left; font-size: 90% '>"; // Установить стиль для заголовка. html + = "<div style = 'text-align: center; размер шрифта: 120%; цвет: желтый;" + "font-weight: 700;'>"; // obj.data содержит элемент Document DOM, соответствующий // запрошенной странице var domdata = obj.data; // Отображение заголовка меню. Используйте getElementsByTagName (), чтобы получить элемент <menu>. // Поскольку в файле есть только один элемент меню, // вы можете получить к нему доступ с помощью элемента с индексом «0». // Затем вы можете использовать getAttribute, чтобы получить текст, связанный с атрибутом «menu» // меню. var title = domdata.getElementsByTagName ("menu"). item (0) .getAttribute ("title"); // В качестве альтернативы вы можете получить заголовок, получив узел элемента меню // и вызвав для него функцию «атрибуты». Это возвращает массив // атрибутов узла элемента. В этом случае есть только один // атрибут (заголовок), поэтому вы можете отобразить значение для атрибута в // индексе 0. Например: // // var title = domdata.getElementsByTagName ("menu"). Item (0) .attributes.item (0) .nodeValue; html + = title + "</ div> <br>"; // Получить список узлов элемента <food> в файле var itemList = domdata.getElementsByTagName ("food"); // Перебираем все узлы <food> для (var i = 0; i <itemList.length; i ++) {// Для каждого узла <food> получаем дочерние узлы. var nodeList = itemList.item (i) .childNodes; // Цикл по дочерним узлам. Извлечение данных из текстовых узлов, которые // являются дочерними по отношению к узлам имен, цен и калорий. for (var j = 0; j <nodeList.length; j ++) {var node = nodeList.item (j); if (node.nodeName == "name") {var name = node.firstChild.nodeValue; } if (node.nodeName == "price") {var price = node.firstChild.nodeValue; } if (node.nodeName == "calories") {var calories = node.firstChild.nodeValue; } // Если пользователь решил отобразить описания, а // дочерний узел - «# cdata-section», захватите содержимое описания CDATA для отображения. if (node.nodeName == "description" && description == true) {if (node.firstChild.nodeName == "# cdata-section") var data = node.firstChild.nodeValue; }} // Добавляем извлеченные данные в строку HTML. html + = "<i> <b>"; html + = имя; html + = "</ b> </ i> <br>"; html + = "& emsp;"; html + = цена; html + = "-"; // Если «калории» больше, чем указанный пользователем предел калорийности, // отображаем его красным цветом. if (calories> calorieLimit) {html + = "<font color = # ff0000>"; html + = калории + "калории"; html + = "</ font>"; } else html + = calories + "calories"; html + = "<br>"; // Если пользователь решил отображать описания if (description == true) {html + = "<i>" + data + "</ i> <br>"; }} // Закрыть div html + = "</ div>"; document.getElementById ('content_div'). innerHTML = html; }; gadgets.util.registerOnLoadHandler (makeDOMRequest); </ script>]]> </ Content> </ Module>

Этот пример кода иллюстрирует четыре основные функции, которые вы используете для взаимодействия с данными DOM:

  • getElementsByTagName (tagname) - Для документа DOM возвращает массив узлов элементов, имена которых совпадают с tagname. Вы можете получить все узлы элемента в файле, используя подстановочный знак (*), например: response.getElementsByTagName ("*").
  • getElementById (id) - для документа DOM извлекает один узел по идентификатору.
  • getAttribute (attrib) - для узла элемента возвращает атрибут attrib. Например: response.getElementsByTagName ("menu"). Item (0) .getAttribute ("title").
  • Атрибуты - для узла элемента возвращает массив атрибутов узла.

В этом примере показаны только несколько различных функций для навигации по дереву DOM. Некоторые из других, которые вы можете попробовать, включают lastChild, nextSibling, previousSibling и parentNode.

Работа с разными типами узлов

Ключом к эффективной работе с DOM является понимание иногда тонких различий между различными типами узлов.

Тип узла Описание Возвращаемые значения Элемент Gotchas Структурные строительные блоки документа, такие как <p>, <b> или <calories>. nodeName: какой бы текст ни находился внутри угловых скобок. Например, имя узла <menu> - это «меню».
nodeType: 1
nodeValue: null Элемент имеет значение nodeValue, равное нулю. Чтобы получить значение узла текста или атрибута, связанного с элементом, необходимо перейти к этим узлам. Например: element.firstChild.nodeValue для текста и element.getAttribute (attrib) для атрибутов. текст Текст. Текстовый узел всегда содержится внутри элемента. Это дитя элемента. имя_узла: # текст
nodeType : 3
nodeValue: любой текст, содержащийся в узле. Некоторые браузеры отображают все пробелы в документе как текстовые узлы, так что вы получаете «пустые» текстовые узлы в вашем объекте DOM. Это может привести к неожиданным результатам, когда вы идете по дереву. Решение может быть таким же простым, как отфильтровывание текстовых узлов, которые содержат только символ новой строки, или вы можете захотеть сделать более надежную обработку. Для более подробного обсуждения этой темы см. Пробелы в DOM , Атрибут Пара ключ-значение, которая предоставляет дополнительную информацию об узле элемента (например, заголовок = «мой документ»). Атрибут содержится в узле элемента, но он не является дочерним элементом узла элемента. имя_узла: левое значение в паре атрибутов. Если атрибут title = «мой документ», nodeName является title.
nodeType: 2
nodeValue: правое значение в паре атрибутов (в этом примере «мой документ»). Даже если атрибуты являются узлами и содержатся в узлах элемента, они не являются дочерними узлами элемента. Они наследуются от интерфейса Node, но DOM не считает их частью дерева DOM. Это означает, что хотя вы можете использовать многие функции узлов на узлах атрибутов (таких как nodeName, nodeValue и nodeType), вы не можете получить доступ к узлам атрибутов с помощью функций обхода дерева DOM. Для доступа к атрибутам вы используете атрибуты функций и getAttribute (attrib). CDATA Раздел, в котором контент остается один, не интерпретируется. Разделы CDATA используются для экранирования блоков текста, содержащих символы, которые в противном случае считались бы разметкой. Единственный разделитель, который распознается в разделе CDATA, - это строка "]]>", которая завершает раздел CDATA. имя_узла: # cdata-section
nodeType: 4
nodeValue: текст и разметка внутри разделителей CDATA. Текст в разделе CDATA имеет собственную разметку. Это может повлиять на то, как вы включите его в свой гаджет.
Другие источники

Работа с каналами

Вы можете добавить канал на свою страницу iGoogle, введя его URL в форму « Добавить по URL» в каталоге содержимого. При этом используется встроенная поддержка фидов API гаджетов, чтобы создать гаджет для фида и добавить его в iGoogle. Его легко использовать, но он не позволяет вам выполнять какую-либо настройку содержимого или отображения. Кроме того, вы не можете использовать его с другими контейнерами.

Для более сложной обработки каналов вы можете использовать метод makeRequest () и указать тип содержимого FEED. Запросы каналов пытаются проанализировать XML-канал ATOM или RSS и вернуть ответ в виде объекта в кодировке JSON.

С типом контента FEED вы можете указать следующие параметры:

Параметр Тип данных Описание gadgets.io.RequestParameters. NUM_ENTRIES Число, необязательно Количество записей фида, которые нужно извлечь из фида. Допустимый диапазон: от 1 до 100. По умолчанию используется значение 3. gadgets.io.RequestParameters. GET_SUMMARIES Boolean, необязательно: извлекать ли полнотекстовые сводки для записей в ленте. По умолчанию это false. Вам следует установить значение true, только если вы планируете использовать данные. Полные резюме могут быть довольно большими и не должны передаваться без необходимости.

Вот поля в объекте фида JSON:

Поле Описание ErrorMsg Если определено, описывает любую произошедшую ошибку. URL URL канала RSS / Atom. Заголовок Название канала. Описание Слоган или описание канала. Ссылка Как правило, URL домашней страницы канала. Автор Автор ленты. Entry Массив записей фидов. Следующие поля вложены в Entry:
  • Заглавие. Название этой записи канала.
  • Ссылка на сайт. URL этой записи фида.
  • Резюме. Содержание или сводка этой записи фида.
  • Дата. Отметка времени для этой записи в секундах с 1 января 1970 года. Чтобы преобразовать ее в миллисекунды, необходимые для инициализации объекта JavaScript Date с правильной датой, умножьте его на 1000. См. Пример кода гаджета ниже для примера.

Например, рассмотрим этот канал RSS:

&lt;? xml version = "1.0&quot; encoding = "UTF-8" standalone = "yes"?>
<rss version = "2.0">
<Канал>
<title> Примеры кода для makeRequest () </ title>
<Ссылка> http://code.google.com/apis/gadgets/docs/remote-content.html </ ссылка>
<description> В этом фиде перечислены примеры кода для функции гаджетов. * makeRequest (). </ description>
<Язык> гп </ язык>
<Товар>
<title> Пример извлечения текста </ title>
<Ссылка> http://gadget-doc-examples.googlecode.com/svn/trunk/opensocial-gadgets/fetch-csv.xml </ ссылка>
<description> Этот пример иллюстрирует, как использовать makeRequest () с текстовым содержимым. </ description>
<Автор> Google </ автор>
<pubDate> Сб, 09 августа 2008 11:46:09 UT </ pubDate> </ item>
<Товар>
<title> Пример извлечения XML </ title>
<Ссылка> http://gadget-doc-examples.googlecode.com/svn/trunk/opensocial-gadgets/fetch-XML.xml </ ссылка>
<description> В этом разделе описывается, как использовать makeRequest () с содержимым XML. </ description>
<Автор> Google </ автор>
<pubDate> Суббота, 09 августа 2008 11:46:09 UT </ pubDate>
</ Элемент>
<Товар>
<title> Пример получения канала </ title>
<Ссылка> http://gadget-doc-examples.googlecode.com/svn/trunk/opensocial-gadgets/feed-fetch.xml </ ссылка>
<description> Этот пример иллюстрирует, как использовать makeRequest () с контентом Feed. </ description>
<Автор> Google </ автор>
<pubDate> Сб, 09 августа 2008 10:33:09 UT </ pubDate>
</ Элемент>
<Товар>
<title> Извлечь пример JSON </ title>
<Ссылка> http://gadget-doc-examples.googlecode.com/svn/trunk/opensocial-gadgets/fetch-json.xml </ ссылка>
<description> Этот пример иллюстрирует, как использовать makeRequest () с содержимым JSON. </ description>
<Автор> Google </ автор>
<pubDate> Сб, 09 августа 2008 03:55:28 UT </ pubDate> </ item>
</ Канал>
</ Новости>

Если вы выбираете вышеупомянутый канал с типом содержимого FEED, возвращаемое значение кодируется в виде строки JSON следующим образом:

{"Entry": [{"Link": "http://gadget-doc-examples.googlecode.com/svn/trunk/opensocial-gadgets/fetch-csv.xml", "Date": 1218282369000, "Title" : "Fetch Text Example", "Summary": "Этот пример иллюстрирует, как использовать makeRequest () с текстовым содержимым." }, {"Link": "http://gadget-doc-examples.googlecode.com/svn/trunk/opensocial-gadgets/fetch-XML.xml", "Date": 1218282369000, "Title": "Fetch XML Пример "," Сводка ":" В этом разделе описывается, как использовать makeRequest () с содержимым XML. " }, {"Link": "http://gadget-doc-examples.googlecode.com/svn/trunk/opensocial-gadgets/feed-fetch.xml", "Date": 1218277989000, "Title": "Feed Fetch Пример "," Сводка ":" Этот пример иллюстрирует, как использовать makeRequest () с содержимым ленты. " }, {"Link": "http://gadget-doc-examples.googlecode.com/svn/trunk/opensocial-gadgets/fetch-json.xml", "Date": 1218254128000, "Title": "Получить JSON Пример "," Сводка ":" Этот пример иллюстрирует, как использовать makeRequest () с содержимым JSON. " }], "Description": "В этом фиде перечислены примеры кода для гаджетов. * MakeRequest () function.", "Link": "http://code.google.com/apis/gadgets/docs/remote-content. html "," Автор ":" Google "," URL ":" http://gadget-doc-examples.googlecode.com/svn/trunk/opensocial-gadgets/sample-gadgets-feed.xml "," Заголовок " : "Примеры кода для makeRequest ()"}

В следующем примере показано, как использовать makeRequest () для получения канала и отображения частей его данных в гаджете. Вот гаджет. Он получает канал, содержащий записи с форума разработчиков гаджетов. Это позволяет пользователям указывать:

  • Количество записей для отображения
  • Должен ли гаджет отображать дату для каждой записи
  • Должен ли гаджет отображать сводку для каждой записи

Это код для примера:

&lt;? xml version = "1.0&quot; encoding = "UTF-8"?> <Module> <ModulePrefs title = "Пример получения фида" title_url = "http://groups.google.com/group/Google-Gadgets-API" scrolling = "true"> </ ModulePrefs> <UserPref name = "show_date" display_name = "Показать даты?" datatype = "bool" default_value = "false" /> <UserPref name = "num_entries" display_name = "Количество записей:" default_value = "5" /> <UserPref name = "show_summ" display_name = "Show Summaries?" datatype = "bool" default_value = "false" /> <Content type = "html"> <! [CDATA [<style> #content_div {font-size: 80%; поле: 5px; background-color: #FFFFBF;} </ style> <div id = "content_div"> </ div> <script type = "text / javascript"> // Получить userprefs var prefs = new gadgets.Prefs (); var showdate = prefs.getBool ("show_date"); var records = prefs.getInt ("num_entries"); var summary = prefs.getBool ("show_summ"); function getFeed () {var params = {}; params [gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.FEED; params [gadgets.io.RequestParameters.NUM_ENTRIES] = новый номер (записи); params [gadgets.io.RequestParameters.GET_SUMMARIES] = резюме; var url = "http://groups.google.com/group/Google-Gadgets-API/feed/rss_v2_0_msgs.xml"; gadgets.io.makeRequest (URL, ответ, параметры); }; function response (obj) {// obj.data содержит данные канала var feed = obj.data; var html = ""; // Показать заголовок и описание канала html + = "<div> <b>" + feed.Title + "</ b> </ div>"; html + = "<div>" + feed.Description + "</ div> <br>"; // Доступ к данным для данной записи if (feed.Entry) {for (var i = 0; i <feed.Entry.length; i ++) {html + = "<div>" + "<target = '_ blank 'href =' "+ feed.Entry [i] .Link +" '> "+ feed.Entry [i] .Title +" </a> "; if (showdate == true) {// Поле даты записи фида содержит метку времени в секундах // с 1 января 1970 года. Чтобы преобразовать ее в миллисекунды, необходимые // для инициализации объекта JavaScript Date с правильной датой, / / умножить на 1000. var миллисекунд = (feed.Entry [i] .Date) * 1000; переменная дата = новая дата (миллисекунды); html + = date.toLocaleDateString (); html + = ""; html + = date.toLocaleTimeString (); } if (summary == true) {html + = "<br> <i>" + feed.Entry [i] .Summary + "</ i>"; } html + = "</ div>"; }} document.getElementById ('content_div'). innerHTML = html; }; gadgets.util.registerOnLoadHandler (getFeed); </ script>]]> </ Content> </ Module>

Работа с JSON

JSON (JavaScript Object Notation) - это формат обмена данными, позволяющий кодировать определенные типы объектов (массивы и коллекции пар ключ-значение) в виде строк, которые можно легко передавать. Вы можете использовать тип содержимого JSON для извлечения содержимого в кодировке JSON в виде объекта JavaScript.

Гаджет ниже извлекает контент из текстового файла, который содержит следующую строку в кодировке JSON:

{"Имя": "Рябина", "Порода": "Лабрадор", "Хобби": ["выборка", "плавание", "рывок", "еда"]}}

При извлечении содержимого из текстового файла, содержащего эту строку, возвращаемое значение представляет собой объект JavaScript, содержащий пары ключ-значение (то есть ассоциативный массив). Этот пример извлекает объект и затем распечатывает содержащиеся в нем пары ключ-значение. Если значение является массивом (как указано в квадратных скобках []), оно превращает содержимое массива в маркированный список:

&lt;? xml version = "1.0&quot; encoding = "UTF-8"?> <Module> <ModulePrefs title = "Пример JSON выборки" /> <Content type = "html"> <! [CDATA [<div id = "content_div "> </ div> <script type =" text / javascript "> function makeJSONRequest () {var params = {}; params [gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON; // Этот URL возвращает строку в кодировке JSON, представляющую объект JavaScript var url = "http://gadget-doc-examples.googlecode.com/svn/trunk/opensocial-gadgets/json-data.txt"; gadgets.io.makeRequest (URL, ответ, параметры); }; ответ функции (obj) {var jsondata = obj.data; var html = ""; // Обработка возвращенного объекта JS в виде ассоциативного массива для (var key in jsondata) {var value = jsondata [key]; html + = key + ":"; // Если 'value' является массивом, отображаем его содержимое в виде маркированного списка if (value instanceof Array) {html + = "<br /> <ul>"; for (var i = 0; i <value.length; i ++) {html + = "<li>" + jsondata.Hobbies [i] + "</ li>"; } html + = "</ ul>"; } // Если 'value' не является массивом, просто запишите его в виде строки else {html + = value + "<br />"; }} document.getElementById ('content_div'). innerHTML = html; }; gadgets.util.registerOnLoadHandler (makeJSONRequest); </ script>]]> </ Content> </ Module>

Это вывод гаджета:

Имя: Роуэн
Порода: Лабрадор ретривер
Хобби:

  • выборка
  • плавание
  • дергать
  • принимать пищу

Подробнее о JSON

API гаджетов предоставляет метод gadgets.json.stringify () для кодирования объекта в виде строк JSON и метод gadgets.json.parse () для преобразования строки JSON в объект. Обратите внимание, что, поскольку OpenSocial выполняет автоматическое экранирование HTML всех возвращаемых данных, включая данные приложения, перед их синтаксическим анализом необходимо отсоединить строковые объекты JSON в хранилище приложений, например: gadgets.util.unescapeString (jsondata).

В этом примере создается массив JavaScript, кодируется его как строка JSON, а затем преобразуется строка JSON обратно в объект Array:

&lt;? xml version = "1.0&quot; encoding = "UTF-8"?> <Module> <ModulePrefs title = "Пример JSON" /> <Content type = "html"> <! [CDATA [<div id = "content_div" > </ div> <script type = "text / javascript"> var html = ""; // Создание объекта Array var myfriends = new Array (); myfriends [0] = "Туки"; myfriends [1] = "Роуэн"; myfriends [2] = "Тревор"; // Кодировать массив как строку JSON var jsonString = toJSON (myfriends); html + = "Строка JSON:" + jsonString + "<br />"; html + = "Тип jsonString:" + typeof (jsonString) + "<br />"; // Преобразовать строку JSON обратно в объект var arr_obj = toObject (jsonString); html + = "Тип arr_obj равен" + typeof (arr_obj); document.getElementById ('content_div'). innerHTML = html; // Кодировать объект как строковую функцию JSON toJSON (obj) {return gadgets.json.stringify (obj); } // Преобразование строки JSON в объектную функцию toObject (str) {return gadgets.json.parse (str); } </ script>]]> </ Content> </ Module>

Вывод этого гаджета выглядит следующим образом:

Строка JSON - Touki "," Rowan "," Trevor. Тип jsonString - строка. Тип arr_obj - объект.

Установка типа авторизации

API гаджетов поддерживает следующие типы авторизации:

  • gadgets.io.AuthorizationType.OAUTH (контейнер использует Протокол OAuth )
  • gadgets.io.AuthorizationType.SIGNED (запрос подписан контейнером)
  • gadgets.io.AuthorizationType.NONE (по умолчанию)

То, как вы используете эти методы, зависит от вашего контейнера. Вот один пример использования подписанного типа авторизации, характерного для Orkut. Для обсуждения использования OAuth в гаджетах см. Написание гаджетов OAuth ,

методы

makeRequest () позволяет вам выбирать между методами HTTP GET и POST.

ПОЛУЧИТЬ

Как правило, вы используете GET для получения информации с веб-сайта. GET является режимом по умолчанию для makeRequest (), но вы можете явно сделать запрос GET следующим образом:

function makeGETRequest (url) {var params = {}; params [gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET; gadgets.io.makeRequest (URL, ответ, параметры); }; ответ функции (obj) {alert (obj.text); }; makeGETRequest ( "http://example.com");

Чтобы передать параметры на ваш сервер в GET-запросе, просто добавьте их в строку запроса при выполнении запроса:

makeGETRequest ( "http://example.com?param1=12345&param2=hello");

СООБЩЕНИЕ

POST-запросы обычно используются для передачи данных на сервер с целью изменения или удаления записей. Вы можете передавать большие объемы данных в запросе POST, чем вы обычно можете сделать с помощью запроса GET.

POST может быть выполнен с использованием следующего кода:

function makePOSTRequest (url, postdata) {var params = {}; postdata = gadgets.io.encodeValues ​​(postdata); params [gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST; params [gadgets.io.RequestParameters.POST_DATA] = postdata; gadgets.io.makeRequest (URL, ответ, параметры); }; ответ функции (obj) {output (obj.text); }; var data = {data1: "test", data2: 123456}; makePOSTRequest ("http://example.com", data);

Помимо указания МЕТОДА в параметрах opt_params для этого запроса, вы должны указать параметр под ключом gadgets.io.RequestParameters.POST_DATA. Кодировка по умолчанию для POST - application / x-www-form-urlencoded, что означает, что значение параметра POST_DATA должно представлять собой серию пар «ключ / значение» в формате urlencoded, соединенных с амперсандами (&). Чтобы упростить преобразование объектов данных в этот формат, предусмотрена функция gadgets.io.encodeValues. encodeValues ​​принимает объект JavaScript и возвращает закодированную строку, подходящую для параметра POST_DATA.

Например, работает:

var data = {data1: "test", data2: 123456}; gadgets.io.encodeValues ​​(данные);

производит строку:

data1 = тест & data2 = 123456

Эта строка может быть передана непосредственно как значение для gadgets.io.RequestParameters.POST_DATA.

Обновление кеша

Если вы используете makeRequest () для извлечения контента, который обновляется более одного раза в час, например данных фида, вы можете не получить последние обновления. Это потому, что ваши результаты кэшируются, чтобы ваш гаджет работал быстрее. Если вы хотите быть уверены, что ваш гаджет содержит самые последние данные, вы можете использовать параметр refreshInterval для обхода кэша и принудительного обновления в указанный интервал. Другими словами, кэш обновляется каждые X секунд, где X = refreshInterval.

Вызовы makeRequest кэшируются по умолчанию. В приведенном ниже примере функция-оболочка принимает те же параметры, что и вызов makeRequest, но принимает другой параметр с именем refreshInterval, который позволяет указывать длительность кэша.

функция makeCachedRequest (url, обратный вызов, params, refreshInterval) {
var ts = new Date (). getTime ();
var sep = "?";
if (refreshInterval && refreshInterval> 0) {
ts = Math.floor (ts / (refreshInterval * 1000));
}
if (url.indexOf ("?")> -1) {
sep = "&";
}
url = [url, sep, "nocache =", ts] .join ("");
gadgets.io.makeRequest (url, callback, params);
}

Кэширование служит полезной цели, и вы должны быть осторожны, чтобы не обновлять кэш так часто, чтобы снизить производительность. Кэширование ускоряет получение данных. Это также снижает нагрузку на сторонние серверы, на которых размещается удаленный контент. Вы должны попытаться избежать полного отключения кэша (что вы сделали бы, используя refreshInterval: 0). Если ваш гаджет получает миллионы просмотров страниц в день, отправляя миллионы запросов на эти серверы, отключение кэширования может не только негативно повлиять на производительность вашего гаджета, но и может привести к перегрузке серверов, которые предоставляют вашему гаджету данные.

Поскольку содержимое обновляется по умолчанию каждый час, имеет смысл указывать интервал менее часа. Рекомендуемый диапазон для refreshInterval - больше 60 и меньше 3600.

Вернуться к началу

Похожие

Обновление Google Планета Земля исправляет несколько ошибок в Linux, добавляет новую иконку
... ступно обновление для настольной версии Google Планета Земля для Windows, macOS и Linux"> Теперь доступно обновление
Как легко создать собственную тему Google Chrome
Google Chrome Web Store предлагает множество темы для Chrome , которые включают фоновые изображения для вашей новой вкладки и настраиваемые цвета. Еще лучше - вы можете создать
SSL бесплатно
Бесплатные SSL-сертификаты и бесплатные Wildcard SSL-сертификаты в считанные минуты Более 3 000 000+ бесплатных SSL-сертификатов, созданных с помощью SSLForFree Как это работает Let's Encrypt - первый бесплатный и открытый CA Мы генерируем сертификаты, используя их сервер ACME, используя проверку домена. Частные ключи генерируются в вашем браузере и никогда не передаются. Для браузеров,
Напишите свои собственные гаджеты
Начиная знакомит вас с гаджетами. Следующий шаг - создание собственных гаджетов. Этот документ рассказывает вам, как. Основные шаги Вот основные шаги, которые вы выполняете для создания и развертывания гаджета: Используйте любой текстовый редактор, чтобы написать свою спецификацию гаджета, и разместите ее на общедоступном веб-сервере. Добавьте свой гаджет на сайт, на котором можно
Как передавать файлы между Mac и iPhone
Я недавно написал о 9 способов передачи файлов с одного Mac на другой Это полезно, если у вас есть, скажем, iMac и ноутбук, и вам нужно передавать файлы туда и обратно. Но вам также может понадобиться перенести файлы с вашего Mac на ваше устройство iOS, что не так просто: iOS не предназначена для приема только какого-либо файла, и у вас нет одинаковых опций для открытия файлов в разных приложениях.
Приложение для редактирования PDF
... се чаще приходится обращаться с документами в формате PDF? Помимо чтения этих файлов, вам нужно изменить их, вставив в них блики, аннотации и так далее? Хотите ли вы редактировать PDF-файлы прямо со своего смартфона или планшета, возможно, во время путешествия? Тогда вам действительно нужно скачать несколько приложений для редактирования PDF . Как скажешь? Вы уже думали об этом, но не знаете, какие приложения загрузить? Тихо, вы пришли в нужное место в нужное время!
Adobe Reader не работает в Windows 10
Если Adobe PDF Reader не работает при открытии файлов PDF в Windows 10 , в этом сообщении предлагается несколько способов исправления проблемы с перестал работать Adobe Acrobat Reader DC . PDF (Portable Document Format) стал неотъемлемой частью технической сферы, что делает его важным инструментом для управления любым важным документом. Adobe Reader или Acrobat является наиболее часто используемым программным обеспечением в Windows для
Настройки Exchange Server вы должны получить правильно
Microsoft вложила миллионы долларов в Azure и Office 365, и их конкуренты следуют примеру своих собственных добросовестных публичных предложений. Но общедоступные облачные решения не для всех. Организации многих групп имеют законные причины не желать, чтобы их ограниченные данные в системах находились вне их полного контроля. Для многих из этих объектов локальный сервер Exchange является обязательным. Microsoft продолжает обновлять программное обеспечение с гарантией того, что любые
Magento 1 против Magento 2: откуда мне знать, что пора обновляться?
Постоянные изменения - новая норма сферы электронной коммерции. Работа с изменяющимся поведением клиентов, устаревшей функциональностью, новыми приложениями и непрерывной адаптацией является частью повседневной жизни онлайн-предпринимателя. Модернизация магазина - важнейшее решение, чтобы оставаться на шаг впереди и справляться с конкурентным давлением. Это дальновидный способ дать
Тест NAS-сервера Buffalo TeraStation WS5420DNW6 (Windows Server)
... работает с несколькими брендами, потому что на ранее протестированном NAS мы использовали Western Digital Red . Для этой модели у нас есть 4 HDD объемом 2 ТБ. Диски не монтируются на сайлентблоках, что увеличит шумовые неудобства.
Презентация репетитора с использованием видео CV
... ство давно ассоциируется не только с подготовкой к школе или зрелости. Каждый день в польском Интернете появляются сотни тысяч новых репетиторских объявлений по различным предметам. Вы можете видеть рекламу от нешкольных предметов все чаще и чаще. Широкий спектр репетиторства привел к тому, что конкуренция среди репетиторов возросла, поэтому необходимо использовать наиболее эффективные методы продвижения их репетиторской работы. Одним из таких способов, который привлекает трафик на объявление

Комментарии

Зачем платить за VPN-сервисы, которые дают вам возможность получить доступ к нему только с одного устройства?
Зачем платить за VPN-сервисы, которые дают вам возможность получить доступ к нему только с одного устройства? При поиске лучшего платного VPN для торрент-сервисов, выберите тот, который защищает вашу личность, независимо от того, используете ли вы его с помощью устройства Android, Apple, Windows или Chrome (на самом деле VPN для Chrome используется, когда человек использует только браузер). Доступное. Мы
Web и получить подарок?
Web и получить подарок? Получите бесплатную Dr.Web Security Space на 2 месяца на этом сайте. Каждый серийный номер имеет промо-код. Какой подарок ваш, зависит от этого промо-кода. Donload и установите Dr.Web Security Space. Не забудьте сначала удалить свой текущий антивирус. Через две недели вы увидите рекламный баннер в личном кабинете «Мой Dr.Web». Чтобы перейти в личный кабинет, нажмите значок паука, а затем
Ваша работа включает в себя сбор опросов и отзывов?
Ваша работа включает в себя сбор опросов и отзывов? Как ты это делаешь? Вы отправляете электронные письма своей команде, просите обзоры и вручную вводите лист? или есть централизованная таблица Excel и попросить всех обновить? - Теперь позвольте мне сказать вам, что это один печальный способ сделать, и я думаю ... даже вы согласитесь с этим! Теперь давайте обратимся к блоггерам / авторам - у большинства из нас есть блоги, и нам всем нужны наши читатели, чтобы связаться с нами, либо для вопросов,

Quot; encoding = "UTF-8"?
Lt;?
Quot; encoding = "UTF-8"?
Lt;?
Quot; encoding = "UTF-8"?
Quot; encoding = "UTF-8" standalone = "yes"?
Quot; encoding = "UTF-8"?
Com/group/Google-Gadgets-API" scrolling = "true"> </ ModulePrefs> <UserPref name = "show_date" display_name = "Показать даты?
Quot; encoding = "UTF-8"?

Новости

Banwar.org
Наша совместная команда Banwar.org. Сайт казино "Пари Матч" теперь доступен для всех желающих, жаждущих волнения и азартных приключений.