Пошук щоденникових записів Google+ і їх інтеграція з PHP-додатками

  1. Використані скорочення
  2. основи API
  3. Малюнок 1. URL-адресу Google Profile з Google ID
  4. Малюнок 2. Консоль Google API з ключем доступу до API
  5. Лістинг 1. Приклад Web-каналу щоденникових записів з Google+ в форматі JSON
  6. Отримання доступу до каналу щоденникових записів
  7. Лістинг 2. Обробка інформації з каналу щоденникових записів Google+
  8. Малюнок 3. PHP-об'єкт, який містить відомості про щоденникових записах Google+
  9. Малюнок 4. Web-сторінка з щоденниковими записами Google+
  10. Лістинг 3. Відображення додаткових даних і впроваджених ресурсів з каналу щоденникових записів Google+
  11. Малюнок 5. Web-сторінка з повідомленнями та вкладеннями Google+
  12. Лістинг 4. Інтерактивна форма для відображення змісту щоденникових записів Google+
  13. Малюнок 6. Web-сторінка з повідомленнями та вкладеннями Google+
  14. Лістинг 5. Інтерактивна форма для отримання профілю користувача Google+
  15. Малюнок 7. Web-сторінка з профілями користувачів Google+
  16. Лістінг 6. Пошук щоденникових запісів за ключовими словами
  17. Малюнок 8. Web-форма для пошуку щоденникових записів Google+ за ключовими словами
  18. Пошук профілів користувачів
  19. Лістинг 7. Пошук щоденникових записів за профілем користувача
  20. Малюнок 9. Web-форма для пошуку профілів користувачів Google+ за ключовими словами
  21. Лістинг 8. Відображення коментарів до щоденникових записів
  22. Малюнок 10. Web-сторінка з щоденниковими записами Google+ і коментарями до них
  23. Ресурси для скачування

Витяг повідомлень і пошук користувачів в Google+ за допомогою API Google+ і PHP

Google+, новий член сімейства соціальних мереж, - чергова спроба Google створити соціальну мережу, яка дозволяла б учасникам легко обмінюватися новинами і файлами і взаємодіяти з друзями. Схоже, в ній є все для того, щоб стати популярною. Судячи з повідомлень, станом на грудень 2011 року у Google+ щодня з'являлося 625 тис. Нових передплатників і налічувалося в цілому 62 млн користувачів (див. Розділ ресурси ).

Використані скорочення
  • API: Application programming interface / Інтерфейс прикладних програм
  • HTTP: Hypertext Transfer Protocol
  • JSON: JavaScript Object Notation
  • PHP: Hypertext preprocessor

Web-розробникам є сенс скористатися успіхом Google+. Як і багато інших служб Google, Google+ забезпечена API для програмістів, який дозволяє їм отримати доступ до створюваної користувачами інформації через додатки власної розробки. Так як API надає вихідні дані в форматі JSON, його легко інтегрувати з більшістю інструментів програмування.

У цій статті розглядається API Google+ Data. У ній показано, як його використовувати для добування інформації з Google+ та її інтеграції в PHP-додаток. (Це захоплююче заняття, так що попереджаємо про небезпеку впасти в залежність.)

основи API

Перш ніж приступити до розробки додатків для служби Google+, потрібно зрозуміти, як вона працює. API працює по протоколу HTTP і очікує HTTP-запиту до заданої кінцевої точки. Після отримання цього запиту сервер API відповідає на нього повідомленням JSON, що містить запитувані дані. Потім ці дані можна проаналізувати за допомогою мови програмування для сервера (такого як PHP або Perl) або клієнтського інструментарію (наприклад, jQuery або mooTools) і витягати з них інформацію для інтеграції в Web-сторінку.

Насамперед потрібно підготуватися:

  1. Створіть обліковий запис Google+.
    1. Увійдіть в обліковий запис Google і по посиланню «+ Ви» відкрийте головне меню, щоб завести обліковий запис Google+.
    2. Перейдіть на сторінку настройки Google і отримаєте персональний URL-адресу Google Profile, що містить ваш ідентифікатор Google ID, як показано на малюнку 1 .
    3. Запишіть цей ID; він знадобиться для деяких прикладів з цієї статті.
    Малюнок 1. URL-адресу Google Profile з Google ID
  2. Активуйте доступ до API для свого облікового запису Google+.
    1. Перейдіть до консолі Google API (див. Посилання в розділі ресурси ) І створіть новий проект.
    2. Активуйте API Google+ для свого нового проекту.
    3. Ви отримаєте автоматично згенерований ключ API, який можна використовувати для доступу до цього API. Ключ знаходиться на вкладці API Access консолі Google API, як показано на малюнку 2 .
    4. Запишіть свій ключ API.
    Малюнок 2. Консоль Google API з ключем доступу до API

Доступ до API Google+ можна отримати і за допомогою ідентифікатора OAuth. (Обговорення OAuth виходить за рамки цієї статті.)

Отримавши Google+ ID і ключ API, можна спробувати звернутися із запитом до API через браузер за адресою https://www.googleapis.com/plus/v1/people/ID/activities/public?key=API-KEY. У цьому запиті не забудьте замінити наповнювачі щойно отриманими значеннями свого ідентифікатора і ключа API. Відповідь на запит, який можна побачити в вихідному коді результуючої сторінки, буде містити список ваших останніх повідомлень в Google+. Він виглядає приблизно так, як лістинг 1 . Унікальні ідентифікатори стерті.

Лістинг 1. Приклад Web-каналу щоденникових записів з Google+ в форматі JSON
{ "Kind": "plus # activityFeed", "etag": "ab49djslas22", "nextPageToken": "eJxtbiSnOTUova1kyV5Z7y", "selfLink": "https://www.googleapis.com/plus/v1/people/ID/ activities / public? "," nextLink ":" https://www.googleapis.com/plus/v1/people/ID/activities/ public? maxResults = 20 & pageToken = "," title ":" Plus Public Activity Feed for John Doe "," updated ":" 2012-01-17T06: 05: 03.277Z "," id ":" tag: google.com 2010: / plus / people / ID / activities / public "," items ": [ { "kind": "plus # activity", "etag": "abc", "title": "Sleepy at work", "published": "2012-01-17T06: 05: 03.000Z", "updated": "2012-01-17T06: 05: 03.277Z", "id": "zab", "url": "https://plus.google.com/ID/posts/XgGBBbn", "actor": { "id ":" ID "," displayName ":" John Doe "," familyName ":" Doe "," givenName ":" John "," url ":" https://plus.google.com/ID "," image ": {" url ":" https://lh5.googleusercontent.com/9HzARk/Cxo/photo.jpg?sz=0 "}}," verb ":" post "," object ": {" objectType " : "note", "content": "Sleepy at work", "originalContent": "", "url": "https: //plus.googl e.com/ID/posts/XgGBBbn "," replies ": {" totalItems ": 0," selfLink ":" https://www.googleapis.com/plus/v1/activities/xys/comments "}," plusoners ": {" totalItems ": 0," selfLink ":" https://www.googleapis.com/plus/v1/activities/xys/people/plusoners "}," resharers ": {" totalItems ": 0, "selfLink": "https://www.googleapis.com/plus/v1/activities/xys/people/resharers"}}, "provider": { "title": "Google+"}, "access": { " kind ":" plus # acl "," items ": [{" type ":" public "}]}}, {...}]}

API Google+ відповідає на запити повідомленнями JSON, що містять запитувані дані. Google+ пропонує кілька цікавих Web-каналів, в тому числі:

  • Web-канал щоденникових записів, що містить всі повідомлення, опубліковані конкретним користувачем;
  • канал коментарів, що містить перелік коментарів користувачів до кожної окремої щоденникової записи;
  • канал персон, що містить список користувачів, які відповідають зазначеним ключовим словом або щоденникових записів.

Для доступу до перечісленнием каналах повинен розпізнаватися вашими за допомогою ключа API або ідентифікатора OAuth.

Сам канал відформатований як JSON-документ, зовнішні ключі якого містять назву каналу та URL-адреси поточної сторінки (а також, якщо потрібно, наступної і попередньої сторінок) результуючого набору. Масив items містить колекцію ресурсів. Залежно від запитуваної каналу ресурси можуть бути щоденниковими записами, профілями або коментарями. Кожен елемент колекції містить додаткові відомості про ресурс, в тому числі:

  • загальнодоступний URL-адресу ресурсу;
  • тип і ідентифікатор ресурсу;
  • автора;
  • дату публікації.

Залежно від типу ресурсу можуть бути включені додаткові дані, такі як зміст щоденникових записів, опис профілю, фотографія автора, кількість відповідей, пересилання або очок (+1) або вкладення і їх вміст. У цій статті наведені приклади усіх цих даних.

Поки API Google+ доступний тільки для читання. З нього можна отримувати відомості, але операції записи, такі як розміщення нових щоденникових записів або коментарів, оновлення профілів авторів або їх фотографій і видалення щоденникових записів, в даний час не підтримуються.

Використання змісту Google+ в сторонніх додатках регулюється умовами обслуговування Google+. Додаток має відповідати Правилам Google+ для розробників. Перш ніж зануритися в розробку, варто витратити кілька хвилин на прочитання цих документів, щоб забезпечити дотримання всіх необхідних правил (див. Розділ ресурси ).

Отримання доступу до каналу щоденникових записів

У цьому розділі показано, як інтегрувати дані, отримані з API Google+, в PHP-додаток. Найпростіший спосіб - за допомогою компонента Zend Framework Zend_Http_Client, який спрощує процес створення, передачі і обробки HTTP-запитів. В лістингу 2 показано, як використовувати Zend_Http_Client для передачі запитів до API Google+ і обробки результатів.

Лістинг 2. Обробка інформації з каналу щоденникових записів Google+
<? Php // завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Http_Client'); // визначення ідентифікатора користувача $ uid = 'YOUR-ID-HERE'; // визначення ключа API $ key = 'YOUR-API-KEY-HERE'; try {// отримання доступу до каналу щоденникових записів // розшифровка відповіді JSON $ client = new Zend_Http_Client ( "https://www.googleapis.com/plus/v1/people/$uid/activities/public?key=$key" ); $ Response = $ client-> request ( 'GET'); $ Result = json_decode ($ response-> getBody ()); // перебір елементів відповіді echo '<h1>'. $ Result-> title. '</ H1>'; echo count ($ result-> items). 'Post (s) found. <br/> '; echo '<ol>'; foreach ($ result-> items as $ entry) {echo '<li>'; echo '<a href="'. $entry-> url.' "> '. $ Entry-> title. '</a>'; echo '('. date ( "d MY h: i", strtotime ($ entry-> published)). ')'; echo '</ li>'; } Echo "</ ol>"; } Catch (Exception $ e) {echo 'ERROR:'. $ E-> getMessage (); }?>

У лістингу 2 спочатку завантажується бібліотека класів Zend і инициализируется екземпляр класу Zend_Http_Client. Цей клієнт можна використовувати для створення та передачі запиту GET до каналу щоденникових записів користувача через кінцеву точку API https://www.googleapis.com/plus/v1/people/[ID]/activities/public (як в лістингу 1 ). Зверніть увагу, що URL-адресу кінцевої точки в даному випадку повинен містити Google ID користувача і ключ API, згенерований консоллю Google API.

Потім відповідь на запит у форматі JSON аналізується і перетворюється в PHP-об'єкт за допомогою функції PHPjson_decode (), як показано на малюнку 3 .

Малюнок 3. PHP-об'єкт, який містить відомості про щоденникових записах Google+

Якщо порівняти властивості об'єкта на малюнку 3 з парами ключ / значення документа JSON з лістингу 1 , То можна помітити відповідність між ними. Тепер легко перебрати масив items об'єкта, витягти дані по окремим щоденникових записів (такі як заголовок, URL і дата публікації) і відформатувати їх для відображення на Web-сторінці.

Приклад вихідних даних наведено на малюнку 4 .

Малюнок 4. Web-сторінка з щоденниковими записами Google+

Витяг щоденникових записів і вкладень

Вихідні дані каналу щоденникових записів в лістингу 1 містять додаткові відомості по кожній публікації, включаючи метадані про впроваджені ресурсах, таких як відео або фотографії. Так що лістинг 2 можна доповнити таким чином, щоб отримувати і відображати ці додаткові відомості, як показано в лістингу 3 .

Лістинг 3. Відображення додаткових даних і впроваджених ресурсів з каналу щоденникових записів Google+
<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Transitional // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns = "http : //www.w3.org/1999/xhtml "xml: lang =" en "lang =" en "> <head> <title> Extracting data from a public activity feed </ title> <style> table {border- collapse: yes; } .Photo {vertical-align: top; } Td.divider {border-bottom: dashed silver 1px; } </ Style> </ head> <body> <? Php // завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Http_Client'); // визначення ідентифікатора користувача $ uid = 'YOUR-ID-HERE'; // визначення ключа API $ key = 'YOUR-API-KEY-HERE'; try {// отримання доступу до каналу щоденникових записів // decode JSON response $ client = new Zend_Http_Client ( "https://www.googleapis.com/plus/v1/people/$uid/activities/public?key=$key" ); $ Response = $ client-> request ( 'GET'); $ Result = json_decode ($ response-> getBody ()); // перебір елементів відповіді echo '<h1>'. $ Result-> title. '-'. count ($ result-> items). 'Post (s) found </ h1>'; echo '<table>'; foreach ($ result-> items as $ entry) {echo '<tr>'; echo '<td class = "photo"> <img src = "'. $ entry-> actor-> image-> url. '" /> <br/>'; echo '<a href="'. $entry-> actor-> url.' "> '. $ Entry-> actor-> displayName. '</a> </ td> <td>'; if (! empty ($ entry-> title)) {echo '<a href="'. $entry-> url.' "> '. $ Entry-> title. '</a> <br/>'; } If (count ($ entry-> object-> attachments)) {foreach ($ entry-> object-> attachments as $ a) {switch ($ a-> objectType) {case 'article': echo '<a href = " '. $ a-> url.'"> Article: '. $ A-> displayName. '</a> <br/>'; break; case 'photo': echo '<a href="'.$a-> fullImage-> url.' "> <img src =" '. $ a-> image-> url.' "/> </a> <br/> '; break; case 'video': echo '<a href="'. $a-> url.' "> Video: '. $ A-> displayName. '</a> <br/> <img src = "'. $ A-> image-> url. '" /> <br/>'; break; }}} Echo 'Posted on'. date ( "d MY h: i", strtotime ($ entry-> published)); echo '</ td> </ tr> <tr> <td class = divider colspan = 2> </ td> </ tr>'; } Echo '</ table>'; } Catch (Exception $ e) {echo 'ERROR:'. $ E-> getMessage (); }?> </ Body> </ html>

лістинг 3 йде на крок далі, ніж лістинг 2 . З кожної публікації витягується ім'я і фото автора, які відображаються разом з її змістом. Для повідомлень, що містять додаткові вкладення, такі як зображення, відео або зовнішні посилання, виконується перебір масиву attachments, включеного в кожен елемент, і відповідний ресурс відображається під змістом публікації. Приклад вихідних даних наведено на малюнку 5 .

Малюнок 5. Web-сторінка з повідомленнями та вкладеннями Google+

В лістингу 4 приведена більш інтерактивна версія лістингу 3 , Що дозволяє вводити ідентифікатор щоденникової записи і переглядати докладні відомості про неї. В лістингу 4 використовується інша кінцева точка API, https://www.googleapis.com/plus/v1/activities/[ID], яка приймає ID щоденникової записи і повертає відомості про неї у вигляді запису JSON.

Лістинг 4. Інтерактивна форма для відображення змісту щоденникових записів Google+
<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Transitional // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns = "http : //www.w3.org/1999/xhtml "xml: lang =" en "lang =" en "> <head> <title> Retrieving activity details </ title> <style> table {border-collapse: yes; } .Photo {vertical-align: top; } Td.divider {border-bottom: dashed silver 1px; } .Meta {font-style: italic; } </ Style> </ head> <body> <form method = "post" action = "<? Php echo $ _SERVER [ 'PHP_SELF'];?>"> Search for activity by ID: <input type = "text "name =" q "/> <input type =" submit "name =" submit "value =" Search "> </ form> <? php if (isset ($ _ POST [ 'submit'])) {// завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Http_Client'); // визначення ключа API $ key = 'YOUR-API-KEY-HERE'; $ Aid = $ _POST [ 'q']; try {// отримання публікації користувача // розшифровка відповіді JSON $ client = new Zend_Http_Client ( "https://www.googleapis.com/plus/v1/activities/$aid?key=$key"); $ Response = $ client-> request ( 'GET'); $ Entry = json_decode ($ response-> getBody ()); // перебір елементів відповіді // роздруківка полів echo '<h1>'. $ Entry-> title. '</ H1>'; echo '<table>'; echo '<tr>'; echo '<td class = "photo"> <img src = "'. $ entry-> actor-> image-> url. '" /> </ td> <td>'; if (! empty ($ entry-> title)) {echo '<a href="'. $entry-> url.' "> '. $ Entry-> title. '</a> <br/>'; } If (count ($ entry-> object-> attachments)) {foreach ($ entry-> object-> attachments as $ a) {switch ($ a-> objectType) {case 'article': echo '<a href = " '. $ a-> url.'"> Article: '. $ A-> displayName. '</a> <br/>'; break; case 'photo': echo '<a href="'.$a-> fullImage-> url.' "> <img src =" '. $ a-> image-> url.' "/> </a> <br/> '; break; case 'video': echo '<a href="'. $a-> url.' "> Video: '. $ A-> displayName. '</a> <br/> <img src = "'. $ A-> image-> url. '" /> <br/>'; break; }}} Echo '<div class = "meta"> Posted on'. date ( "d MY h: i", strtotime ($ entry-> published)). 'By <a href="'. $entry-> actor-> url.' "> '. $ Entry-> actor-> displayName. '</a> <br/>'; echo 'Replies:'. (Int) $ entry-> replies-> totalItems. '| + 1s: '. (Int) $ entry-> plusoners-> totalItems. '| Reshares: '. (Int) $ entry-> resharers-> totalItems. '</ Div>'; echo '</ td> </ tr> </ table>'; } Catch (Exception $ e) {echo 'ERROR:'. $ E-> getMessage (); }}?> </ Body> </ html>

В лістингу 4 додана форма введення, яка дозволяє вказати ідентифікатор щоденникової записи. Потім встановлюється зв'язок з кінцевою точкою Google+ API, і запис витягується цілком у формі JSON-документа. Вона перетворюється в об'єкт PHP і форматується для відображення, подібно до того, як показано в лістингу 3 . В лістингу 4 використовуються додаткові метадані, що додаються до кожної публікації, такі як кількість відповідей, пересилання або очок (+1), зібраних публікацією. Ідентифікатор щоденникової записи можна витягти з JSON-документа.

Приклад вихідних даних наведено на малюнку 6 .

Малюнок 6. Web-сторінка з повідомленнями та вкладеннями Google+

Витяг профілів користувачів

Профілі користувачів можна отримувати так само, як їх щоденникові записи. Спочатку слід отримати ідентифікатор користувача Google і включити його в запит, звернений до кінцевої точки API https://www.googleapis.com/plus/v1/people/[ID]. Відповідь JSON містить біографічні відомості про користувача, включаючи повне ім'я, фото, коротку біографію і URL-адреси (якщо є).

лістинг 5 ілюструє цей процес.

Лістинг 5. Інтерактивна форма для отримання профілю користувача Google+
<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Transitional // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns = "http : //www.w3.org/1999/xhtml "xml: lang =" en "lang =" en "> <head> <title> Retrieving user profiles </ title> <style> table {border-collapse: yes; } .Photo {vertical-align: top; } Td.divider {border-bottom: dashed silver 1px; } </ Style> </ head> <body> <form method = "post" action = "<? Php echo $ _SERVER [ 'PHP_SELF'];?>"> Search for user by ID: <input type = "text "name =" q "/> <input type =" submit "name =" submit "value =" Search "> </ form> <? php if (isset ($ _ POST [ 'submit'])) {// завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Http_Client'); // визначення ключа API $ key = 'YOUR-API-KEY-HERE'; $ Uid = $ _POST [ 'q']; try {// отримання публікації користувача // розшифровка відповіді JSON $ client = new Zend_Http_Client ( "https://www.googleapis.com/plus/v1/people/$uid?key=$key"); $ Response = $ client-> request ( 'GET'); $ Result = json_decode ($ response-> getBody ()); // перебір елементів відповіді // роздруківка полів echo '<h1> <img src = "'. $ Result-> image-> url. '" />'. $ Result-> displayName. '</ H1>'; echo isset ($ result-> tagline)? '<H2>'. $ Result-> tagline. '</ H1>': ''; echo isset ($ result-> aboutMe)? $ Result-> aboutMe. '<br/>': ''; if (isset ($ result-> urls) && count ($ result-> urls)) {echo '<h3> Links </ h3> <ul>'; foreach ($ result-> urls as $ u) {$ label = ''; if ($ u-> type == 'json') continue; if ($ u-> type == 'profile') $ label = 'Google+ Profile:'; echo '<li> <a href="'. $u-> value.' "> '. $ Label. $ U-> value. '</a> </ li>'; } Echo '</ ul>'; }} Catch (Exception $ e) {echo 'ERROR:'. $ E-> getMessage (); }}?> </ Body> </ html>

лістинг 5 аналогічний лістингу 4 - він запитує Google ID користувача і підключається до API для отримання інформації про цього користувача. Відповідь зазвичай включає як мінімум ім'я користувача і URL фотографії (або фото за замовчуванням, якщо немає іншого). Якщо користувач вказав додаткові відомості про себе, вони також будуть включені у відповідь JSON. Як і раніше, відповідь можна перетворити в об'єкт PHP і відформатувати для відображення в браузері.

На малюнку 7 наведено приклад вихідних даних лістингу 5 .

Малюнок 7. Web-сторінка з профілями користувачів Google+

Пошук щоденникових записів

Крім отримання однієї публікації або профілю користувача, API Google+ можна використовувати для пошуку Web-каналів щоденникових записів за ключовими словами. Цей метод API, доступний в кінцевій точці https://www.googleapis.com/plus/v1/activities, приймає параметр query, що містить одне або кілька ключових слів для пошуку. В лістингу 6 показаний API в контексті нашого PHP-додатки.

Лістінг 6. Пошук щоденникових запісів за ключовими словами
<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Transitional // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns = "http: / /www.w3.org/1999/xhtml "xml: lang =" en "lang =" en "> <head> <title> Searching public activity feeds </ title> <style> table {border-collapse: yes; } .Photo {vertical-align: top; } Td.divider {border-bottom: dashed silver 1px; } </ Style> </ head> <body> <form method = "post" action = "<? Php echo $ _SERVER [ 'PHP_SELF'];?>"> Search for: <input type = "text" name = "q" /> <input type = "submit" name = "submit" value = "Search"> </ form> <? php if (isset ($ _ POST [ 'submit'])) {// завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Http_Client'); // визначення ключа API $ key = 'YOUR-API-KEY-HERE'; try {if (empty ($ _ POST [ 'q'])) {throw new Exception ( 'No search term provided'); } // поиск всех каналів $ url = "https://www.googleapis.com/plus/v1/activities?key=$key&query=". urlencode ($ _ POST [ 'q']); $ Client = new Zend_Http_Client ($ url); $ Response = $ client-> request ( 'GET'); $ Result = json_decode ($ response-> getBody ()); // перебір повернути каналів // відображення результатів echo '<h1>'. $ Result-> title. '-'. count ($ result-> items). 'Post (s) found </ h1>'; echo '<table>'; foreach ($ result-> items as $ entry) {echo '<tr>'; echo '<td class = "photo"> <img src = "'. $ entry-> actor-> image-> url. '" /> <br/>'; echo '<a href="'. $entry-> actor-> url.' "> '. $ Entry-> actor-> displayName. '</a> </ td> <td>'; if (! empty ($ entry-> title)) {echo '<a href="'. $entry-> url.' "> '. $ Entry-> title. '</a> <br/>'; } If (count ($ entry-> object-> attachments)) {foreach ($ entry-> object-> attachments as $ a) {switch ($ a-> objectType) {case 'article': echo '<a href = " '. $ a-> url.'"> Article: '. $ A-> displayName. '</a> <br/>'; break; case 'photo': echo '<a href="'.$a-> fullImage-> url.' "> <Img src =" '. $ A-> image-> url.' "/> </a> <br/> '; break; case 'video': echo '<a href="'. $a-> url.' "> Video: '. $ A-> displayName. '</a> <br/> <img src = "'. $ A-> image-> url. '" /> <br/>'; break; }}} Echo 'Posted on'. date ( "d MY h: i", strtotime ($ entry-> published)); echo '</ td> </ tr> <tr> <td class = divider colspan = 2> </ td> </ tr>'; } Echo '</ table>'; } Catch (Exception $ e) {echo 'ERROR:'. $ E-> getMessage (); }}?> </ Body> </ html>

лістінг 6 створює Web-форму, яка містіть поле введення, Пожалуйста користувач может ввести Одне або кілька ключовими слів. Після відправки форми створюється новий екземпляр Zend_Http_Client, і введення користувача складається в запит GET до кінцевої точки API. Відповідь JSON перетворюється в об'єкт PHP для подальшої обробки.

На малюнку 8 наведено приклад вихідних даних лістингу 6 .

Малюнок 8. Web-форма для пошуку щоденникових записів Google+ за ключовими словами

За замовчуванням кожен результуючий набір, повернутий API Google+, містить 10 елементів. API можна змусити повертати інше кількість результатів, додавши в запит API параметр maxResults і вказавши значення в інтервалі від 1 до 20. Кожен документ JSON, що повертається API, також містить властивість nextPageToken, яке можна додати в рядок запиту для вилучення наступної сторінки результуючого набору.

Пошук профілів користувачів

API Google+ можна використовувати для пошуку людей за ключовими словами. Кінцева точка API для цього методу: https://www.googleapis.com/plus/v1/people. Як і API для пошуку щоденникових записів, кінцева точка приймає параметр query, що містить ключові слова, і виконує пошук за ключовими словами з цього параметра.

В лістингу 7 наведено варіант лістингу 6 , Призначений для пошуку людей, замість щоденникових записів.

Лістинг 7. Пошук щоденникових записів за профілем користувача
<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Transitional // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns = "http : //www.w3.org/1999/xhtml "xml: lang =" en "lang =" en "> <head> <title> Searching for people </ title> <style> table {border-collapse: yes; width: 100%; } .Photo {vertical-align: top; } .Posts td: not (: last-child) {border-bottom: dashed silver 1px; } Td.divider {border-bottom: solid green 2px; } Td.post {padding-bottom: 20px; } .Meta {font-style: italic; } </ Style> </ head> <body> <form method = "post" action = "<? Php echo $ _SERVER [ 'PHP_SELF'];?>"> Search for people by name: <input type = "text "name =" q "/> <input type =" submit "name =" submit "value =" Search "> </ form> <? php if (isset ($ _ POST [ 'submit'])) {// завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Http_Client'); // визначення ключа API $ key = 'YOUR-API-KEY-HERE'; try {if (empty ($ _ POST [ 'q'])) {throw new Exception ( 'No search term provided'); } // пошук всіх каналів $ url = "https://www.googleapis.com/plus/v1/people?key=$key&query=". urlencode ($ _ POST [ 'q']); $ Client = new Zend_Http_Client ($ url); $ Response = $ client-> request ( 'GET'); $ Result = json_decode ($ response-> getBody ()); // перебір повернутих каналів // відображення результатів echo '<h1>'. $ Result-> title. '-'. count ($ result-> items). 'User (s) found </ h1>'; echo '<table>'; foreach ($ result-> items as $ entry) {echo '<tr>'; echo '<td class = "photo"> <img src = "'. $ entry-> image-> url. '" /> <br/>'; echo '<a href="'. $entry-> url.' "> '. $ Entry-> displayName. '</a> </ td> <td>'; // отримання трьох останніх повідомлень користувача $ client-> setUri ( "https://www.googleapis.com/plus/v1/people/". $ Entry-> id. "/ Activities / public? Key = $ key & maxResults = 3 "); $ Response = $ client-> request ( 'GET'); $ Result2 = json_decode ($ response-> getBody ()); echo '<table class = "posts">'; foreach ($ result2-> items as $ entry2) {echo '<tr> <td class = "post">'; if (! empty ($ entry2-> title)) {echo '<a href="'. $entry2-> url.' "> '. $ Entry2-> title. '</a> <br/>'; } If (count ($ entry2-> object-> attachments)) {foreach ($ entry2-> object-> attachments as $ a) {switch ($ a-> objectType) {case 'article': echo '<a href = " '. $ a-> url.'"> Article: '. $ A-> displayName. '</a> <br/>'; break; case 'photo': echo '<a href="'.$a-> fullImage-> url.' "> <img src =" '. $ a-> image-> url.' "/> </a> <br/> '; break; case 'video': echo '<a href="'. $a-> url.' "> Video: '. $ A-> displayName. '</a> <br/> <img src = "'. $ A-> image-> url. '" /> <br/>'; break; }}} Echo '<span class = "meta"> Posted on'. date ( "d MY h: i", strtotime ($ entry2-> published)). '</ Span>'; echo '</ td> </ tr>'; } Echo '</ table>'; echo '</ td> </ tr> <tr> <td class = divider colspan = 2> </ td> </ tr>'; } Echo '</ table>'; } Catch (Exception $ e) {echo 'ERROR:'. $ E-> getMessage (); }}?> </ Body> </ html>

лістинг 7 цікавий тим, що в ньому використовуються два виклики методів API. По-перше, він запитує кінцеву точку API https://www.googleapis.com/plus/v1/people для пошуку профілів користувачів, які відповідають зазначеним ключовим словам. Потім він виконує перебір результуючої колекції. Для кожного профілю витягується Google ID користувача і включається в другій запит до кінцевої точки API https://www.googleapis.com/plus/v1/people/[ID]/activities/public для отримання трьох останніх повідомлень користувача. як и в лістингу 6 , Кожна публікація супроводжується посиланнями на впроваджені ресурси, такі як зображення, відео або зовнішні статті.

результат лістингу 7 наведено на малюнку 9 .

Малюнок 9. Web-форма для пошуку профілів користувачів Google+ за ключовими словами

Витяг коментарів до щоденникових записів

Google+ дозволяє користувачам розміщувати щоденникові записи, що містить повідомлення, фотографії, відео та посилання, які інші користувачі можуть коментувати. Зміст коментарів доступно через канал коментарів кожної щоденникової записи за допомогою кінцевої точки API https://www.googleapis.com/plus/v1/activities/[ID]/comments. У лістингу 8 , Який спирається на попередній код, показано, як відобразити щоденникові записи і коментарі до них.

Лістинг 8. Відображення коментарів до щоденникових записів
<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Transitional // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns = "http : //www.w3.org/1999/xhtml "xml: lang =" en "lang =" en "> <head> <title> Retrieving comments </ title> <style> table {border-collapse: yes; } .Photo {vertical-align: top; } Td.divider {border-bottom: dashed silver 1px; } .Meta {font-style: italic; } </ Style> </ head> <body> <form method = "post" action = "<? Php echo $ _SERVER [ 'PHP_SELF'];?>"> Search for comments on activity (enter activity ID): < input type = "text" name = "q" /> <input type = "submit" name = "submit" value = "Search"> </ form> <? php if (isset ($ _ POST [ 'submit']) ) {// завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Http_Client'); // визначення ключа API $ key = 'YOUR-API-KEY-HERE'; $ Aid = $ _POST [ 'q']; try {// отримання веб-каналу щоденникових записів // розшифровка відповіді JSON $ client = new Zend_Http_Client ( "https://www.googleapis.com/plus/v1/activities/$aid?key=$key"); $ Response = $ client-> request ( 'GET'); $ Entry = json_decode ($ response-> getBody ()); // перебір елементів відповіді // роздруківка полів echo '<h1>'. $ Entry-> title. '</ H1>'; echo '<table>'; echo '<tr>'; echo '<td class = "photo"> <img src = "'. $ entry-> actor-> image-> url. '" /> </ td> <td>'; if (! empty ($ entry-> title)) {echo '<a href="'. $entry-> url.' "> '. $ Entry-> title. '</a> <br/>'; } If (count ($ entry-> object-> attachments)) {foreach ($ entry-> object-> attachments as $ a) {switch ($ a-> objectType) {case 'article': echo '<a href = " '. $ a-> url.'"> Article: '. $ A-> displayName. '</a> <br/>'; break; case 'photo': echo '<a href="'.$a-> fullImage-> url.' "> <img src =" '. $ a-> image-> url.' "/> </a> <br/> '; break; case 'video': echo '<a href="'. $a-> url.' "> Video: '. $ A-> displayName. '</a> <br/> <img src = "'. $ A-> image-> url. '" /> <br/>'; break; }}} Echo '<div class = "meta"> Posted on'. date ( "d MY h: i", strtotime ($ entry-> published)). 'By <a href="'. $entry-> actor-> url.' "> '. $ Entry-> actor-> displayName. '</a> <br/>'; echo 'Replies:'. (Int) $ entry-> replies-> totalItems. '| + 1s: '. (Int) $ entry-> plusoners-> totalItems. '| Reshares: '. (Int) $ entry-> resharers-> totalItems. '</ Div>'; echo '</ td> </ tr> </ table>'; // отримання каналу коментарів до щоденникових записів $ client-> setUri ( "https://www.googleapis.com/plus/v1/activities/$aid/comments?key=$key"); $ Response = $ client-> request ( 'GET'); $ Result = json_decode ($ response-> getBody ()); // перебір елементів відповіді // роздруківка полів if (count ($ result-> items)) {echo '<h3>'. $ Result-> title. '</ H3>'; echo '<ul>'; foreach ($ result-> items as $ comment) {echo '<li>'. $ Comment-> object-> content. '<br/>'; echo '<span class = "meta"> Posted on'. date ( "d MY h: i", strtotime ($ comment-> published)). 'By <a href="'. $comment-> actor-> url.' "> '. $ Comment-> actor-> displayName. '</a> </ span>'; echo '</ li>'; } Echo '</ ul>'; }} Catch (Exception $ e) {echo 'ERROR:'. $ E-> getMessage (); }}?> </ Body> </ html>

Перша частина лістингу 8 нагадує лістинг 4 . Вона приймає ідентифікатор щоденникової записи, введений користувачем в Web-форму, і встановлює з'єднання з API для отримання і відображення відомостей з цього запису. Потім подається другий запит до API для отримання доступу до каналу коментарів, який повертає JSON-документ, що містить всі коментарі, розміщені іншими користувачами з приводу цієї щоденникової записи. Цей документ JSON аналізується, і зміст кожного коментаря, а також час публікації і ім'я автора додається на Web-сторінку.

Візуалізований результат показаний на малюнку 10 .

Малюнок 10. Web-сторінка з щоденниковими записами Google+ і коментарями до них

Висновок

API Google+ ще відносно молодий і на момент написання статті підтримує тільки операції читання. Однак, як видно з прикладів до цієї статті, він надає цілий ряд можливостей для інтеграції публікацій Google+ в будь-який Web-додаток. Слід очікувати, що в подальшому, в міру розширення служби Google+, API Google+ запропонує набагато більше можливостей. Але і тепер створювати гібридні програми або спеціальні інтерфейси до Google+ - надзвичайно цікаве заняття. Успішного програмування!

Ресурси для скачування

Схожі тими

Підпішіть мене на ПОВІДОМЛЕННЯ до коментарів

Com/plus/v1/people/ID/activities/public?
Com/plus/v1/people/ID/ activities / public?
Com/plus/v1/people/ID/activities/ public?
Jpg?
Com/plus/v1/people/$uid/activities/public?
E-> getMessage (); }?
Divider {border-bottom: dashed silver 1px; } </ Style> </ head> <body> <?
Com/plus/v1/people/$uid/activities/public?
E-> getMessage (); }?
Meta {font-style: italic; } </ Style> </ head> <body> <form method = "post" action = "<?

Дополнительная информация

rss
Карта