Ваше местоположение в сети:
Рубрика:
Путеводитель по интернету

API

А у меня новая система комментариев. Написал ее сам, так что знание php растет с каждым днем (за тестирование хочу поблагодарить Maljar, Qusko и Spoofi). Вам, наверное, хочется спросить, какое отношение имеет это заявление к заголовку статьи API? Сейчас расскажу. Во-первых, что такое API? Эта аббревиатура расшифровывается как application programming interface. Понятней стало? Пока, наверное, не очень. Итак, все по порядку.

API - это противоположность GUI (=graphical user interface). Когда вы пользуетесь какой-то программой, там грамотно расставлены кнопочки, вы покликали мышкой и добились результата, тогда можно сказать, что у этой программы хороший GUI - графический интерфейс для пользователя. Но иногда хорошего GUI недостаточно. Приведу пример. У живого журнала есть так называемая консоль, которой иногда удобно воспользоваться. Попробуйте, например, ввести туда команду friend list. Вы получите список своих френдов. А можно, например, и забанить какого-либо пользователя, что невозможно сделать через обычный интерфейс.

Такая консоль - это еще не API, но уже не так далеко. API - это когда имеется описание, как написать программу, которая будет выполнять подобные действия автоматически. Например, добавлять 50 френдов в день. Обычному пользователю это, скорей всего, не нужно, но кому-нибудь может и пригодиться. На этом я заканчиваю краткое введение и перехожу к основной теме - API google friend connect. У меня и сейчас осталась авторизация от google friend connect, но от их родных комментариев пришлось отказаться. Почему? А потому что даже google не всегда предоставляет идеальный API.

Дальнейшая часть поста предназначена, наверное, для программистов и вебмастеров. Но если вас заинтересовала тема, продолжаем!

Если вы не знакомы с системой google friend connect, то рекомендую поглядеть на их официальный сайт. Изначально это была просто коллекция гаджетов, которые можно размещать на своем сайте. У меня и сейчас висит такой, с аватарками всех пользователей. Также имеется гаджет с комментариями. Первый наиболее очевидный недостаток такой системы - то что все эти комментарии выводятся через javascript. Это замедляет работу сайта, нарушает функциональность кнопки back, а также скрывает комментарии от индексирования - поисковые роботы не умеют выполнять скрипты. Кроме того, эти гаджеты невозможно нормально настроить - меня всегда раздражало, что по умолчанию на странице видно только начало комментария

Однако в марте google анонсировал открытие API своей системы Google friend connect. Действительно приятно; я вскоре воспользовался этим API, и у меня какое-то время висел на главное странице список последних событий блога - комментариев и лога присоединения пользователей к сайту. Здесь можно почитать про API, однако помните, что это все равно javascript. Кстати, в любом случае рекомендую "игровую площадку", на которой можно попробовать API различных служб google.

Мне этого было недостаточно, хотелось все-таки создавать комментарии на стороне сервера, поэтому я продолжил копаться в документации google и лазать по доскам разработчиков. Во-первых, обнаружилось, что google friend connect - это разновидность платформы opensocial. Opensocial - это специально разработанный протокол для создания социальных сетей, и у него, естественно есть свой API. Если говорить вкратце, то эта система рассматривает три типа объектов - people, activities и appdata. С первым все понятно, activities и appdata - это как UDP и TCP. В activities запись данных в принципе не гарантирована, туда пишут анонсы новостей. Собственно тут мы подходим к причине, по которой бызовые гаджеты от google friend connect показывают только часть комментария - они используют канал activities, в котором ограничена длина!

Перейдем к интеграции комментариев со стороны сервера. У платформы opensocial есть API для обмена данными между серверами, рекомендую посмотреть официальную документацию. Более того, я нашел хорошую статью об интеграции google friend connect на серверной стороне. Кстати, некоторые идеи из этой статьи я и сейчас использую на сайте. Однако, принципиальная проблема оказалась в том, что полные комментарии в принципе невозможно добыть через API opensocial. Я долго думал, что что-то делаю не так, но потом эту информацию подтвердил сотрудник google в официальном форуме разработчиков google friend connect.

Что делать дальше? Поскольку я горел идеей использовать opensocial API, я попытался все-таки воспользоваться серверами google и использовать appdata для хранения моих комментариев. Однако, и тут меня постигла неудача. Appdata принципиально не принимает данные от неавторизованных пользователей. То есть, пойдя таким путем, я навсегда бы лишил свой сайт возможности оставлять анонимные комментарии. Этого мне тоже не хотелось.

Поэтому было принято промежуточное решение. Авторизацию я оставил от google friend connect, а систему комментариев написал сам, теперь они хранятся у меня на сайте. Возможно, пока она у меня немного сырая, но буду дорабатывать. Зато в процессе я много что узнал про API google и opensocial, так что не считаю время потраченным зря. Готов отвечать на вопросы про устройство этих API.

Рекомендую: чтобы работать с фотошопом не нужно быть профессионалом. Убираем красные глаза на фотографии за одну минуту!

757574166

Дата: 12 мая 2009 г., категория: для вебмастеров.

Хотите знать все об интернете?

Введите свой адрес электронной почты чтобы подписаться на обновления!


Уже 1568 постоянных читателей! Присоединяйтесь!


Доставляется при помощи FeedBurner. Никакого спама. Всегда можно отписаться!

Загружается, подождите...
← Анонимный серфингСетевые устройства →

Комментарии

1#

Maljar
12 мая 2009 г. 22:36:47

Интересная задумка и хорошая реализация. Однозначно, время зря не потрачено. Шероховатости со временем сгладятся, а польза и удовлетворение от проделанной работы, останутся.
Благодарю за упоминание моей персоны, всегда рад помочь.
 

2#

Quanzo
15 мая 2009 г. 22:55:36

Спасибо за статью. Интересует вопрос - как получить данные произвольного пользователя по его номеру?
 

3#

Sander
15 мая 2009 г. 23:59:52

Quanzo.
Это все не совсем тривиально. Действительно ли стоит задача получить данные ЛЮБОГО пользователя по номеру? Как у меня реализовано на сайте - аватарка добывается СВОЯ, а дальше она уже просто хранится на сайте. Отвечу сейчас, как это реализовано, если этого недостаточно, пишите дальше, будем обсуждать. Кстати, чтобы комментарии не попадали на модерацию, авторизуйтесь по GFC.

Итак, как и было рекомендовано в одной из ссылок, добывать данные можно функцией
function make_request($url)
{
$timeout=5;
$max_retries=5;
$useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11";
$curl=curl_init();
curl_setopt ( $curl, CURLOPT_URL,$url);
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $curl, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt ( $curl, CURLOPT_USERAGENT, $useragent );
$retry=0;
$data="";
while($data=="" AND $retry < $max_retries)
{
$data=curl_exec($curl);
$retry++;
}
curl_close($curl);
return json_decode($data);
}

В таком случае, ее можно дергать примерно так:
$response=make_request("http://www.google.com/friendconnect/api/people/@viewer/@self?fcauth=".$_SESSION["fcauth";]);

И тогда аватар добывается как
$avatar=$response->entry->thumbnailUrl;

Правда, сначала нужно иметь авторизационную куку.
Залогиненность я проверяю как
function user_logged_in()
{
$fc_cookie_id="fcauth<<<<<SITE ID>>>>>";
if(isset($_COOKIE[$fc_cookie_id])) // if there exists the friend connect cookie
{
$_SESSION['logged_in']=TRUE; // set session variable
$_SESSION['fcauth']=$_COOKIE[$fc_cookie_id];
return true;
}
else
{
$_SESSION['logged_in']=FALSE;
return false;
}
}

Этого недостаточно? Более конкретно, что нужно?
 

4#

Quanzo
16 мая 2009 г. 00:20:34

Предполагается следующее: при выводе сообщений в форуме надо печатать имя пользователя и его аватар, а эти данные получить от гугла (с кэшированием только на время вывода страницы). Принадлежность конкретного сообщения предполагается определять по номеру пользователя ($response->entry->id).
P.S. Кэширование данных пользователя тоже вариант, но вопрос: $response->entry->thumbnailUrl постоянная ссылка?
 

5#

Sander
16 мая 2009 г. 00:27:30

Я подумаю над вопросом добывания данных по ID. Должно быть возможно, но там может потребоваться страшная вещь под названием OAUTH - когда GFC сервер принимает не информацию о куке пользователя, а авторизацию сервер-сервер. Я ее не реализовал пока. Наверное, на выходных еще отпишусь по этому поводу.

Запоминать данные пользователя можно в тот момент, когда он оставляет сообщение. Я сейчас ровно так и делаю. А вот постоянна ли ссылка на аватар... не задумывался. А попробуйте потестировать. Поменяйте аватар, что случится со со старыми на этой странице? Можете просто взять какой-нибудь старый пост и там потренироваться, потом скажете - я сотру результаты.
 

6#

Quanzo
16 мая 2009 г. 09:27:49

Поменял аватарку и посмотрим что получится...
 

7#

Quanzo
16 мая 2009 г. 09:36:33

Поменял аватарку и посмотрим что получится...
 

8#

Quanzo
16 мая 2009 г. 09:40:55

Похоже, Ваше решение сохранять адрес аватарки в момент записи коментария - наиболее подходящее.
 

9#

Sander
16 мая 2009 г. 12:12:24

Quanzo
А последние два комментария - они специально без аватарок? Или она потерялась?
 

10#

Quanzo
16 мая 2009 г. 13:06:28

Sander
Нет не потерялись. Я просто удалил изображение, чтобы посмотреть на результат.
 

11#

Sander
16 мая 2009 г. 13:47:56

Ну, значит, Гугл хорошо себя ведет в этом смысле. Поигрался с добыванием данных другого пользователя
$response= make_request("http://www.google.com/friendconnect/api/people/<<<USER_ID>>>/@self?fcauth=".$_SESSION["fcauth";]
добывает ответ. Проблема только в том, что для этого нужно, чтобы тот, кто просматривает, был авторизован, иначе нет сессионной переменной fcauth
Попытка же сделать запрос
$response= make_request("http://www.google.com/friendconnect/api/people/<<<USER_ID>>>/@self";)
Приводит к результату ANONYMOUS REQUESTS CANNOT FETCH DATA
Тем самым действительно единственный выход - использовать авторизацию сервера, но над этим еще надо повозиться.
 

12#

Sander
16 мая 2009 г. 16:36:14

Здесь написано, как делать REST запрос с OAUTH, но у меня никак не получается (не проходит авторизация)
http://code.google.com/intl/ru-RU/apis/friendconnect/opensocial_rest_rpc.html
Может, попробуете?
Я пока задал вопрос об этом в группе разработчиков GFC
 

13#

Quanzo
17 мая 2009 г. 11:17:40

Насколько понял, запрос на получение данных пользователя www.google.com/friendconnect/api/people/<ID of the user to fetch>/@self?oauth_consumer_key=<your
consumer key>
 

14#

Sander
17 мая 2009 г. 12:48:36

Я нашел статью, где описывается, как формировать oauth_signature
Может, у вас хватит сил реализовать?
http://blog.andydenmark.com/2009/03/how-to-build-oauth-consumer.html
Там таки нужно при помощи секретного ключа закодировать все остальные параметры.
Напишите о результатах?
 

15#

Qusko
17 мая 2009 г. 20:49:55

Всегда рад помочь, Ваша работа была проделана не зря :)
Всего доброго!
 

16#

Alex
25 мая 2009 г. 23:21:41

Привет!

Скажи, а можно ли, зная адрес (УРЛ) сайта, как-то стандартным образом определить, подключён ли он к GFC, а затем, если подключён, получить его ID, чтобы позже работать с данными этого сайта?
 

17#

Sander
26 мая 2009 г. 00:01:20

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

P.S. Сорри, что у меня не очень внятно отображается, что коммент не пропал, а отправлен на модерацию. Нужно доработать. Кстати, если залогиниться через GFC, то комменты аппрвятся без модерации.
 

18#

Alex
26 мая 2009 г. 01:09:45

Спасибо за ответ. Подписался на комментарии. Может быть удастся что-то найти или придётся идти курить спецификацию OS :-)
 

19#

Sander
7 июня 2009 г. 00:36:55

Для Alex
Я не забыл про вопрос, но, к сожалению, и там ничего хорошего не ответили. Похоже, такой возможности просто нет. По ID данные добываются, но не обратно.
 

20#

Dfg
11 июня 2009 г. 13:31:30

Я пишу api для ning.com. Использую opensocial 0.8. Но у меня есть одна проблема, которую никак не могу решить. Есть вот такой код.
function request() {
key = document.getElementById('key').value;
text = document.getElementById('text').value;

var req = opensocial.newDataRequest();
req.add(req.newUpdatePersonAppDataRequest(opensocial.DataRequest.PersonId.VIEWER, key, text), "set_data");
req.send(set_callback);
};
Если выполняю его с аккаунта OWNER все хорошо. а если в аккаунта VIEWER то возвращяеться ошибка "[{"error":{"message":"badRequest: Invalid Request was rejected.","code":400}}]". Возможно вы знаете что-то про это? Спасибо
 

21#

schanker
11 июня 2009 г. 19:14:48

благодарен за полезную статью
 

22#

Анатолий
11 июня 2009 г. 20:30:22

На каком движке реализован ваш сайт?
Кто вы по специальности, кем работаете?
 

23#

Sander
12 июня 2009 г. 00:41:04

schanker
Спасибо

Dfg
так. я таким способом не работал, но могу поиграться (после праздников). Что там именно за запрос? (поля key и text, считываемые на сайте). Пришлите чуть побольше информации, и обещаю попробовать разобраться, что там может быть не так

Анатолий
никакого движка, сам писал. IT (в основном, 1с). А что, хотите что-то предложить?
Кстати, Ваша ссылка не работает, была указана без http. Могу потом отредактировать в нормальную, но не сейчас, у меня инет через мобильник
 

24#

Тамаз
7 июля 2009 г. 17:47:10

Спасибо, Вы мне помогли,получил ответ на вопрос, ответ на который долго искал.
 

25#

Sander
7 июля 2009 г. 20:56:17

Рад, что пригодилось!
 

26#

Quanzo
15 июля 2009 г. 22:47:54

Google Friend Connect теперь и на русском языке. Надо в настройках сайта в панели управления GFC указать русский язык.
З.Ы. GFC теперь имеет еще одно название "Мастер сообществ"
 

27#

Sander
15 июля 2009 г. 22:54:45

Quanzo, спасибо за совет, поменял язык!
 

28#

Galika
21 августа 2009 г. 12:06:37

хорошая идея, только не понял зачем внизу про фотошоп писать:)
 

29#

zayusha
21 сентября 2009 г. 21:59:45

Cпасибо за новую систему комментариев, но не совсем понятно..
 

30#

Александр
30 ноября 2009 г. 13:37:52

Скажите, пожалуйста, у меня древовидная система комментирования, можно ли как-нибудь автоматически отправлять e-mail по ID пользователя, например, если на чей-то комментарий ответили, чтобы ему пришло уведомление?
 

31#

Sander
30 ноября 2009 г. 13:40:23

Александр, да все можно, главное - знать, как у вас реализована система комментирования. Я сам писал свой движок, поэтому знаю, где и что крутить.
Если у вас, например, WordPress, то надо поискать плагины...
 

32#

Александр
7 декабря 2009 г. 02:44:06

Я про OpenSocial. В базе храню комментарии, а также Id, DisplayName и ThumbURL из данных GFC. Я так понимаю, что автоматом отправить e-mail присоединенному пользователю, зная его Id, не получится. Это как защита от спама? Хотя в анкете пользователя руками отправить ему e-mail можно.
 

33#

Sander
7 декабря 2009 г. 10:14:06

Александр, напрямую нельзя, но должен быть способ.
Я сам не делал, поэтому могу только дать направление - функция RequestSendMessage из OpenSocial.
http://code.google.com/intl/ru-RU/apis/opensocial/docs/0.7/reference/opensocial.html
 

34#

http://www-eplay.com/
26 марта 2010 г. 13:39:45

Вау! Спасибо то что мне нужно, мега респект!
щас буду делать если что можно получить помощь от вас?
 

35#

Тимур
6 апреля 2010 г. 19:36:19

Благодарю ибо расширили знания.
 

36#

DexuZz
7 июня 2010 г. 11:01:44

Всегда считал такие штуки высшим пилотажем.. Вот так и происходит, кто то придумывает, разрабатывает в итоге развивается.. а остальная масса тупо пользуется и даже не задумывается.. тем самым происходит отупление)))
 

37#

defs
11 августа 2010 г. 18:35:26

Уважаемый автор. Вопрос про Гугл АПИ, можно ли тянуть по апи выдачу? (Для того, чтобы смотреть позиции и количество страниц найденных по запросу) Если вдруг это можно делать из php и получать туда же результат - отпишите пожалуйста в указанную почту, может куплю немного ваших знаний для личных нужд.
 

38#

Sander
12 августа 2010 г. 00:58:17

Отписал в почту
 

Подписаться на: комментарии к статье (rss), комментарии к статье (e-mail)

[*] Авторизоваться при помощи профиля Google (и не только)
Самые активные участники сайта:

Хотите разместить здесь свою аватарку? Авторизуйтесь, загружайте картинку и комментируйте!
Имя:

E-mail (если хотите подписаться на комментарии):

Сайт (не обязательно):

Я - робот! (снимите галочку, если это не так)
Для блоггеров: если вы хотите чтобы ваша ссылка индексировалась поисковыми системами, вам нужно авторизоваться при помощи Google Friend Connect и написать осмысленный комментарий по теме. В таком случае я переведу ваш аккаунт в разряд "trusted". Комментарии пользователей с проверенным аккаунтом не попадают на модерацию, ссылки индексируются, а рядом с ником стоит значок с зеленой галочкой. Да, модерацию могут пройти только ссылки IT-тематики! Внимание: если вы не авторизуетесь, я не смогу сделать вашу ссылку активной даже если мне понравятся ресурс и комментарий!
Комментарий:

Подписаться на  комментарии к статье (rss), комментарии к статье (e-mail)