Главная » Функционал » PHP и API » Парсинг API при помощи JS или PHP

Парсинг API при помощи JS или PHP

18.10.2012 в 20:55
Автор: Sheriff   

1. Введение.
Что такое "парсинг"? Парсингом (от англ. parse) называют процесс анализа или разбора определенного контента с помощью специальных скриптов.
API сайта предоставляет веб-мастеру возможность взаимодействия с сайтом через скрипты (PHP или JavaScript).
В этой статье мы рассмотрим парсинг API, то есть получение некоторых данных с сайта скриптом через API.

2. Активация API.
Включение возможности использования API проводится в панеле управления сайтом в разделе “Настройки” > “Общие настройки” > “Разрешить использование API”.


Использовать API при наличии ключа нужно посредством GET-запроса следующим образом: http://blog.ucoz.ru/api/blog/ucoz_2010/2011-01-01-172?apikey=APIKEY

То есть к запросу просто добавляем параметр apikey с нашим ключом.
Ключ нужен в том случае, если вы не хотите, чтобы кто угодно имел доступ к API вашего сайта.

3. Описание API, как использовать.
На данный момент API доступен в 11 модулях: blog, board, dir, gb, load, news, photo, publ, stuff, forum, index. Советуем внимательно ознакомиться с инструкцией по описанию использования базового API.

Зачем нужно API?
Допустим, у нас есть свой сайт, по адресу blog.ucoz.ru. Берём какую-нибудь ссылку на сайте, например, ссылку на материал (модуль Блог): http://blog.ucoz.ru/blog/ucoz_2010/2011-01-01-172
После доменного имени в ссылку добавляем слово "api", вот так: http://blog.ucoz.ru/api/blog/ucoz_2010/2011-01-01-172
То есть фактически, для использования API (если он активирован для сайта) достаточно вписать префикс /api/ между адресом сайта и именем модуля.

Но для чего?
Перейдём по полученной ссылке (то есть http://blog.ucoz.ru/api/blog/ucoz_2010/2011-01-01-172). Вместо привычного шаблона система выдает страницу с XML-кодом. Всё то же самое, только используется не шаблон страницы, а формируется XML-код.

Зачем нам XML-код?
Допустим, нам необходимо узнать название материала с помощью php-скрипта или с js-скрипта (для чего - узнаете позже). При обычных условиях (не имея API), нам бы пришлось парсить полученный текст страницы с помощью регулярных выражений. Составление регулярных выражений - очень сложное занятие. С XML-кодом же намного проще: его не надо парсить регулярными выражениями, он структурирован, стандартизирован, никакой зависимости от оформления исходного кода страницы.
Т.к. XML стал де-факто стандартом в передаче данных, то работать с ним можно на любом языке программирования, как PHP, так и JS.

Далее в статье под парсингом данных мы будем подразумевать разбор XML-кода с данными.

4. Парсинг данных через PHP.




Попробуем получить название этого материала: http://blog.ucoz.ru/blog/ucoz_2010/2011-01-01-172

Code
<?php

$___notjson = 1;

$context = stream_context_create( // создаём контекст
                             array(
                    'http' => array( // в качестве транспортного протокола будет использоваться http://
                     'method' => 'GET', // метод запроса - GET
                     'header' => 'Content-Type: text/xml', // xml
                     'timeout' => 8 // время на соединение с сервером - 8 сек
                    )
                             )
);

// получаем содержимое (XML-код) страницы http://blog.ucoz.ru/api/blog/ucoz_2010/2011-01-01-172
$page = file_get_contents('http://blog.ucoz.ru/api/blog/ucoz_2010/2011-01-01-172', false, $context);

// разбираем полученный XML в массив $xml
$xml = xmlrpc_decode($page, 'utf8');

// отображаем какую-нибудь информацию из полученного

// например, заголовок материала
echo $xml['TITLE'];

// или посмотрим всё содержимое массива
print_r($xml);

?>


echo $xml['TITLE'] отобразит нам Итоги 2010
print_r($xml) отобразит нам весь массив с данными этого материала, т.е.:

Code
Array
(
                      [MATERIAL_ID] => 172
                      [TITLE] => Итоги 2010
                      [MESSAGE] => <div style="text-align: justify;">
<img alt="" src="http://lu-work.ucoz.com/blogpics/ny_2011.jpg"><br><br>Вот и наступил 2011 год. В такие дни всегда хочется оглянуться и проанализировать что же было сделано за прошедший год. <div><br>Если ничего не падало, не обновлялось по несколько суток, не взрывалось и не искрило - это вовсе не значит что ничего сделано не было. На самом деле у нас этот год был годом вдумчивого развития, в определенной степени экстенсивного - нам уже как-никак 5 лет, почтенный для интернета возраст :)<br>Повысилась безопасность и стабильность работы системы, выросло комьюнити, расширилась функциональность, гораздо лучше стала работать техподдержка.<br><br>Итак, что же по пунктам можно отметить, и что вспоминается за прошедший 2010 год?<br><br><ul><li>Общий трафик системы достиг ста миллионов хитов в сутки.*</li></ul><img alt="" src="http://meddy.ucoz.kz/one.png"><br><div align="center"><font color="#696969"><i>Общий трафик системы</i></font></div><div style="text-align: left;" align="center"><font color="#696969"><i><br></i></font></div><div style="text-align: left;" align="center"><font color="#696969"><i> <span style="font-size: 7pt;">* без учета поисковых и прочих известных ботов</span></i></font></div><ul><li>
Топ100 системы замыкают сайты с посещаемостью 10 000 человек в сутки (в первый год работы системы, замыкающие сайты имели посещаемость 100 человек в сутки). Также на первые позиции в топе стали попадать нерусскоязычные ресурсы.</li></ul><div align="center"><img alt="" src="http://meddy.ucoz.kz/ru-sitecount-in-top.png"><br><font color="#a9a9a9"><i>Рост числа русскоязычных сайтов за 2010<br><br><img alt="" src="http://meddy.ucoz.kz/de-sitecount-in-top.png"><br>Рост числа немецкоязычных сайтов за 2010<br></i></font></div><br>
<br>
                             <div style="border: 1px solid rgb(232, 155, 136); background-color: rgb(255, 239, 232); padding: 8px 11px; margin: 0px; color: rgb(0, 0, 0);"><ul><li>Количество сайтов в системе превысило миллион. Причем это произошло дважды, так как традиционный летний спад в сети и придирчивое вычищение дорвеев и мертвых сайтов уменьшало эту цифру.</li><li>Мы стали более открыты и общительными с нашими                             
пользователями. В том числе нерусскоязычными. У нас появились страницы в
                             Facebook на русском, английском, венгерском, испанском и немецком                             
языках. А так же англо-,  и немецко- язычные твиттеры. </li><li> В системе прошло 3 конкурса - совместный с Microsoft <a target="_blank" href="http://konkursi.ucoz.ru/news/opredeleny_pobediteli_konkursa_ie_reload_v_nominacii_za_luchshij_obzor_posvjashhennyj_ie8_luchshij_webslice/2010-03-23-17">"IE Reload",</a><b> </b>эпистолярный <a target="_blank" href="http://win.ucoz.ru/news/objavlenie_rezultatov_konkursa_obzor/2010-10-25-7">"Обзор"</a> и <a href="http://win.ucoz.com/news/winners/2010-10-25-7#1" target="_blank">Best  uCoz Website</a> на лучший  нерусскоязычный сайт, да и сам <a target="_blank" href="http://win.ucoz.ru/">конкурсный сайт</a>
                             у нас пережил второе рождение. <img src="http://s102.ucoz.net/sm/1/smile.gif" border="0" align="absmiddle" alt="smile" /> <i>Кстати, скоро после Нового года                             
стартует еще один конкурс, те, кто умеет или хочет научиться работать с                             
видео - готовьтесь!</i></li><li>Вышел в свет <a target="_blank" href="http://book.ucoz.ru/">учебник по системе</a>.
                             Очень быстро разошелся по книжным полкам страны (и не одной!) и вышел                             
еще раз - уже вторым, дополненным изданием.  Также появилась его электронная версия. (В начале 2011 года ожидается его англоязычная версия.)</li><li>Добавлены локализации на румынском языке и иврите (<i>последняя на текущий момент в бета версии</i>).</li><li>В альфа-версии появилась возможность использования PHP на uCoz. (Сейчас идет тестирование, открытый запуск ожидается в январе.)</li></ul></div><br>
                             <div style="border: 1px solid rgb(255, 216, 0); background-color: rgb(255, 247, 205); padding: 8px 11px; margin: 0px; color: rgb(0, 0, 0);"><ul><li>Модуль интернет-магазина очень сильно расширился внешним                             
функционалом, встроенными платежными сервисами и внутренними опциями. С                             
февраля он выходит из беты и будет стоить 2$  в месяц.</li><ul><li>Экспорт товаров различные форматы: XML, CSV</li><li>Встроенные способы автоматизированной оплаты: Webmoney, Робокасса, Paypal, SMS (Smscoin), Банковские карты (Liqpay)<br></li><li>Импорт товаров из Excel</li><li>Гибкая и настраиваемая система скидок для покупателей</li><li>Возможность автозаполнения описания из готового каталога товаров и автоматический поиск картинок для товара.</li><li>Выгружаемый прайс-лист формата MS Excel</li><li>Анимированная корзина<br></li><li>У товаров появились опции - цвет, размер, комплектация и т.д.</li><li><a target="_blank" href="http://forum.ucoz.ru/forum/43-32287-1">Подробный список всех изменений</a>.</li></ul></ul></div><br>
                             <div style="border: 1px solid rgb(157, 189, 255); background-color: rgb(225, 235, 255); padding: 8px 11px; margin: 0px; color: rgb(0, 0, 0);"><ul><li>Появилась возможность пополнения аккаунта на uCoz при помощи SMS из 62-х стран в том числе                             
Казахстан, Грузия, Литва, Латвия, Эстония, Израиль, Германия и т.д.<br></li><li>Появился индивидуальный фильтр от спама: сообщения с указанными                             
адресами добавляться не будут. </li><li>Возможность разрешить  гостям оставлять комментарии.</li><li>В нашем <a href="https://domain.ucoz.com" target="_blank">сервисе по регистрации доменов</a> стали доступны новые доменные зоны и системы приема платежей.</li><li>В Webtop'е   появилось новые собственные приложение "Менеджер задач" и "Учет рабочего времени". Добавились немецкий, болгарский и венгерский языки.</li><li>Появилась платная служба техподдержки. Значительно улучшилась работа всей службы технической поддержи - повысилось качество и скорость ответов.</li></ul></div><br>
                             <div style="border: 1px solid rgb(0, 204, 0); background-color: rgb(225, 255, 215); padding: 8px 11px; margin: 0px; color: rgb(0, 0, 0);"><ul><li>Появился интегрированный в систему сервис сокращения ссылок <a target="_blank" href="u.to">u.to</a> и вариант работы с проксированием внешних ссылок.</li><li>Появился проект <a href="http://partner.ucoz.ru" target="_blank">partner.ucoz.ru</a>.</li><li>Появились специальные <a target="_blank" href="http://browsers.ucoz.ru/">сборки браузеров </a>с <a target="_blank" href="http://utoolbar.ucoz.net/">тулбарами</a> для облегчения работы с сайтом.</li></ul></div><br><div style="border: 1px solid rgb(181, 181, 181); background-color: rgb(244, 244, 244); padding: 8px 11px; margin: 0px; color: rgb(0, 0, 0);"><ul><li>Проапгрейдилась железная составляющая многих серверов и появились две новые площадки их размещения.</li></ul></div><br>

                             <div style="border: 1px solid rgb(218, 30, 226); background-color: rgb(254, 230, 255); padding: 8px 11px; margin: 0px; color: rgb(0, 0, 0);"><ul><li>Редактор шаблонов стал более наглядным, появилась подсветка кода.<br></li><li>Добавилась настройка для картинок типа "Максимальные размеры картинки", (а                             
старая осталась как "Размеры уменьшенной копии").</li><li>Добавлена форма для отправки сообщения на снятие таблички +18.</li><li>Добавлена форма для отправки сообщений для разблокировки сайта.</li><li>При добавлении/удалении в любом модуле сделано автоматическое обновление дискового пространства.</li><li>Добавлена опция для отрицания в настройках информеров при указании категорий.</li><li>Добавлена возможность вывода аватаров пользователей при выводе списка материалов в модулях (блог, новости).</li><li>В доске объявлений сделана возможность фильтрования неактивных и истекших материалов.</li></ul></div>
<br>
                             <div style="border: 1px solid rgb(30, 226, 124); background-color: rgb(226, 250, 238); padding: 8px 11px; margin: 0px; color: rgb(0, 0, 0);"><ul><li>Настроена правильная реакция на несуществующие url в модулях.</li><li>Внедрен 301 редирект для склейки имени сайта с www и без него.<br></li><li>Внесены изменения, которые не дают "плодиться" дубликатам контента внутри сайта.</li></ul></div>
<br>
                             <div style="border: 1px solid rgb(255, 149, 83); background-color: rgb(255, 240, 254); padding: 8px 11px; margin: 0px; color: rgb(0, 0, 0);"><ul><li>Произошли изменения в работе сессий, важные для  аккаунта. С точки                             
зрения и пользователя сайта, и владельца сайта сессии стали более                             
безопасными. Число одновременно активных сессий одного пользователя                             
гарантированно - одна. А долгое редактирование документа не приводит больше к "вылету по таймауту". (<i>Это большое и сложное системное изменение.</i>)</li><li>Внедрено кеширование, что очень снизило нагрузку на сервера.</li><li>Реализовывались анти-ддос методы. (Различные сервера и сайты на uCoz постоянно подвергаются ддос-атакам разной степени сложности и интенсивности, однако 99% из них никто из пользователей  не замечает, сайты продолжают работать в штатном режиме.)</li><li>Изменения
                             группы пользователя и поступление новых ЛС теперь видны сразу (при                             
следующем обновлении страницы, без необходимости перелогиниваться).</li></ul></div> </div><div><br></div><div>Это то основное, что запомнилось нам за прошедший год. Безусловно, технически было сделано множество иных изменений, и огромное число мелких багфиксов.</div><div>Система обновлялась в так называемом теневом (фоновом) режиме, без остановки серверов и коллапсирования. Многие изменения, по-сути, и не заметны для наших пользователей, и потому иногда можно услышать вопрос - " а где же обновления"?                             
Но тем не менее - система развивается и обновляется, но не скачкообразно, большими куммулятивными обновлениями, как это было в 2009-ом году, а плавно и в фоновом режиме.</div><div>Что весьма важно, повышается стабильность и надежность работы системы. К сожалению, на определенном этапе для многих программных продуктов и сервисов это становится настоящей проблемой, что часто ведет к умиранию или сильному затуханию. Мы же искренне рады, что нам удается успешно справляться со всеми проблемами роста, и улучшать свою работу и функциональность. </div><div>Нам тоже все время хочется развиваться быстрее, а работать еще лучше, мы осознаем свои упущения и недоработки, но при этом делаем все возможное, чтобы не допускать старых ошибок и становиться лучше, а сервис предоставлять качественней.</div><div><br><b>Новый, 2011 год обязательно порадует нас, и вас, наших пользователей, новыми свершениями и достижениями. Мы планируем полноценно запустить uNet, продолжать развивать uCoz, завоевывать новые рынки и сердца новых пользователей, мы знаем, большая часть из вас нас ценит и любит. И, что самое главное, не только мы сами рассчитываем на новые свершения, мы знаем, что наши усилия, наш сервис многим тысячам людей позволяют, и позволят в новом году осуществлять свои свершения: реализовывать деловые и творческие задумки, воплощать мечты и проекты.</b></div><div><b><br>С наступившим праздником, удачи и успехов!</b><br><br><i>                             

<span style="font-size: 8pt;"><div align="right">Спасибо Ирине aka <a href="http://blog.ucoz.ru/index/8-7264" target="_blank">Meddy</a> за помощь в подготовке большей части данного поста. </div></span>
</i></div></div>
                      [ENTRY_URL] => http://blog.ucoz.ru/blog/ucoz_2010/2011-01-01-172
                      [CATEGORY_NAME] => uCoz
                      [CATEGORY_URL] => http://blog.ucoz.ru/blog/1-0-6
                      [COMMENTS_NUM] => 157
                      [COMMENTS_URL] => http://blog.ucoz.ru/blog/ucoz_2010/2011-01-01-172#comments
                      [USER_NAME] => Kurt
                      [USER_ID] => 6
                      [RATING] => 0.0
                      [RATED] => 0
                      [READS_NUM] => 23293
                      [DATE] => 01.01.2011
                      [TIME] => 17:08
                      [TIMESTAMP] => 1293890935
)


Подробнее о функциях PHP для парсинга API смотрите в официальной документации PHP: http://www.php.net/manual/ru/ref.xmlrpc.php

5. Парсинг данных через JavaScript.
Работа с API через JavaScript аналогична PHP.
Мы, для простоты разработки, будем использовать библиотеку jQuery, тем более, не использовать её не получится - она подключается автоматически на всех сайтах uCoz, вне зависимости от того, хотите ли вы этого или нет (без неё, кстати, некоторые функции на uCoz перестанут работать).

А теперь перейдём к нашему коду.

Code
<script type="text/javascript">
// Делаем GET-запрос на страницу http://blog.ucoz.ru/api/blog/ucoz_2010/2011-01-01-172
$.get(
                 'http://blog.ucoz.ru/api/blog/ucoz_2010/2011-01-01-172', // адрес API-страницы
                 function(data){ // функция, которая сработает, при условии, что наш запрос на страницу успешен
                    // тут 'data' - это переменная, которая будет содержать ответ от запрашиваемой страницы, т.е. XML-код

                          // а теперь делаем разбор данных
                          var mydata = new Array();
                          $('name', data).each(function(){
                     mydata[$(this).text()] = $(this).next().text();
                          });

                          // теперь можем работать с разобранными данными
                          // например, выведем в браузере название спарсенного материала и его автора
                          alert(mydata['TITLE']); // отобразит название материала
                          alert(mydata['USER_NAME']); // отобразит автора материала
                 },
                 'xml' // тут персонально для jQuery указываем тип данных, который она получит в проводимой нами процедуре запроса по адресу API-страницы
);
</script>


Этот код, как видно, «даст» нам название материала и автора материала. Вставлять его можно в любое место шаблона вашего сайта.
Для того, чтобы вставить эти данные в страницу, а не выводить их в окне, вместо alert() нужно использовать функцию jQuery $().html():

Code
<div id="otvet"></div>
<script type="text/javascript">
$.get(
                 'http://blog.ucoz.ru/api/blog/ucoz_2010/2011-01-01-172',
                 function(data){
                          var mydata = new Array();
                          $('name', data).each(function(){
                        mydata[$(this).text()] = $(this).next().text();
                          });
                          $('#otvet').html('Пользователь '+mydata['USER_NAME']+' написал материал: «'+mydata['TITLE']+'»');
                 },
                 'xml'
);
</script>


Этот код вставит на страницу (в div c id="otvet") следующий текст:

Quote
Пользователь Kurt написал материал: «Итоги 2010»


Учтите, что парсинг API через javascript будет работать только с теми ссылками, которые принадлежат вашему домену. То есть с сайта site1.ru можно сделать запрос на http://site1.ru/api/blog, но нельзя на http://site2.ru/api/blog!

6. Зачем это нужно?
Ответ на этот вопрос зависит от вашей фантазии и выходит за рамки данной статьи. В качестве хорошего примера использования API, можно привести ссылку на скрипт «отображение контента по критерию»

Авторы данного мануала: Driver86 ~ cybernova.net и Sheriff ~ fi4a.ru

api, JS, парсинг


Рейтинг: 83  (помогла ли Вам эта инструкция: да / нет)          Просмотров: 41060          Комментариев:

Похожие инструкции