Используйте пользовательскую функцию для заполнения ячейки gSpreadsheet на основе ответа XML / JSON

#api #google-sheets #google-spreadsheet-api

#API #google-sheets #google-sheets-api

Вопрос:

Хорошо, это стало немного сложным для меня, и мне действительно нужна помощь, чтобы справиться с этим.

Проблема

У меня есть GSpreadsheet, в котором есть список данных, в данном случае имен пользователей Twitter. Используя API поставщика услуг (в данном случае Klout API), я хотел бы получить информацию об этом пользователе для заполнения ячейки в электронной таблице.

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

Сценарий

Klout API может возвращать либо XML,либо JSON-ответ (см. http://developer.klout.com/docs/read/api/API ) на основе переданной строки. Например, URL:

http://api.klout.com/1/users/show.xml?key=SECRETamp;users=thewinchesterau

вернет следующий XML-ответ:

<пользователи>
 <пользователь>
 <twitter_id>17439480</twitter_id>
 <имя_ширины_witter_screen_name>thewinchesterau</имя_ширины_witter_screen_name>
 <оценка>
 <kscore>56.63</kscore>
 <наклон>0</slope>
 <описание>создает контент, который распространяется по всей их сети и стимулирует обсуждения.</описание>
 <kclass_id>10</kclass_id>
 <kclass>Socializer</kclass>
 <kclass_description> Вы являетесь центром социальных сцен, и люди рассчитывают на вас, чтобы узнать, что происходит. Вы быстро подключаете людей и с готовностью делитесь своими социальными знаниями. Ваши подписчики ценят вашу сеть и щедрость.</kclass_description>
 <kscore_description>winchesterau имеет низкий уровень влияния.</kscore_description>
 <network_score>58.06</network_score>
 <amplification_score>29.16</amplification_score>
 <true_reach>90</true_reach>
 <delta_1day>0.3</delta_1day>
 <delta_5day>0.5</delta_5day>
 </оценка>
 </пользователь>
</пользователи>

На основе этого ответа я хотел бы иметь возможность заполнять разные ячейки значениями, возвращаемыми в пакете XML (или JSON, если проще).

Итак, например, у меня была бы электронная таблица, подобная следующей, которая имела бы пользовательские функции для выхода и извлечения значения соответствующего ответа элемента XML для заполнения ячейки:

Ячейка A B C D E
1 Имя пользователя Оценка сети kscore Оценка усиления Истинный охват
2 thewinchester =kscore(A2) =nscore (A2) =ascore (A2) = tscore(A2)

Вопросы

  1. Известны ли вам какие-либо примеры gSpreadsheet, в которых используется API для извлечения данных из внешнего источника?
  2. Как бы написать пользовательскую функцию для извлечения результата из API и заполнения ячейки результатом определенного элемента?

Мы высоко ценим любую имеющуюся у вас информацию, примеры или помощников.

Ответ №1:

Вам нужна importXML функция, задокументированная здесь. Нужная вам формула будет выглядеть примерно так:

 =importXML("http://api.klout.com/1/users/show.xml?key=SECRETamp;users="   A1, "//users/user/score/kscore")
  

Ответ №2:

Вы могли бы написать пользовательский скрипт с помощью Google AppScript, но для этого есть простое решение, похожее на то, что опубликовал Ник Джонсон. Я протестировал это на функции score, но ее можно легко адаптировать к конечной точке show с другим XPath.

 =importXML("http://api.klout.com/1/klout.xml?users="amp;A1amp;"amp;key=YOUR_API_KEY", "//users/user/kscore")
  

Это предполагает, что ваши идентификаторы Twitter находятся в столбце A.

Обратите внимание, что Google Docs ограничивает количество таких функций ImportXML 50 на электронную таблицу. Вы могли бы объединить группы из 5 идентификаторов пользователя для каждого вызова ImportXML, эффективно установив свой лимит до 250 на листе.

Это также может быть адаптировано к аналогичному вызову в Excel, у которого нет такого ограничения. Однако имейте в виду требования Klout, используя надлежащую атрибуцию и ограничения скорости.