?

Log in

No account? Create an account

Previous Entry | Next Entry

Google Base

Немного расскажу про Google Base, в контексте предоставляемого гуглом Google Base API.

"Google Base is a place where you can easily submit all types of online and offline content, which we'll make searchable on Google (if your content isn't online yet, we'll put it there). You can describe any item you post with attributes, which will help people find it when they do related searches. In fact, based on your items' relevance, users may find them in their results for searches on Google Product Search and even our main Google web search." (отсюда)  и еще: "Google Base, is an attempt to enable content owners to upload structured data into Google so it can be searched. The intention of Google Base is that data can be about anything."

Специфическая база данных (точнее - надстройка над хранилищем Google Store) и сервис доступа к ней, ориентированная на хранение, поиск и выборку преимущественно конкретных типов данных - тексты, геоданные (в частности, адреса при помещении в базу автоматически дополняются координатами). Причем предполагается, что данные которые вы поместили в базу могут находиться и использоваться кем угодно (хотя скрывать данные можно, с некоторыми "но").

Думаю, смысл сервиса для самого Google - накопление больших объемов структурированной пользовательской информации (не случайно упор делается на использование уже существующего набора полей) которую потом можно использовать для различных сервисов.

Стоит сразу отметить - это непохоже на распространённые реляционные БД. Понятия таблиц здесь нет - записи независимы и могут иметь разные атрибуты/поля.

- Собственный язык запросов, обмен запросами-ответами через REST, в виде XML (Atom/RSS).
Поскольку для авторизации требуется послать "Authorization:" HTTP header, то в сочетании с отсутствием на сервере crossdomain.xml , флексовые приложения напрямую работать с Google Base не могут.

- Добавленные записи становятся доступными только через несколько (до 24) часов (!)

- Есть ограничение на число запросов через API в секунду (5 на пользователя)

- Возможна привязка к записям изображений (загрузка через указание URL либо в MIME64 через POST) и автогенерация thumbnails для них. Насколько я понял, оригинал изображения не сохраняется (только thumbs двух размеров). Вообще, с привязкой любых файлов не совсем понятно - через веб интерфейс это возможно, но в описании API речь исключительно об изображениях.

- Типы данных в целом стандартные, но их немного. Из специфических - location и url.

- Создание собственных полей не рекомендуется (советуют использовать несколько десятков уже существующих).
Новые (custom) поля создаются не заранее, а прямо в процессе добавления данных (если указанные еще не существуют).

- Есть понятие links между добавленными items

- Вопреки моим ожиданиям - через API Google Base нельзя получить доступ к gmail почте и другим сервисам своёго аккаунта.

- Существует нечто вроде веб-интерфейса к базе (не по всем полям, с претензией на что-то типа интернет-магазина) -
Если добавить запись через API (см. ниже) и через веб-интерфейс, то обе эти записи становятся там видны.

Пример запроса (ключи censored) на INSERT, создающего custom item "custitem" с custom атрибутом "custattr" и значением 5 типа int (обращение к http://www.google.com/base/feeds/items ):

POST /base/feeds/items
Content-Type: application/atom+xml
Authorization: AuthSub token="censored"
X-Google-Key: key=censored

<?xml version='1.0'?>
<entry xmlns='http://www.w3.org/2005/Atom'
       xmlns:g="http://base.google.com/ns/1.0">
  <author>
    <name>frog</name>
    <email>frog@enlight.com</email>
  </author>
  <title type="text">Test title</title>
  <content type="xhtml">
Содержимое. some content
  </content>
  <g:item_type>custitem</g:item_type>
  <g:custattr type="int">5</g:custattr>
</entry>

Ответ:

201 Created
Content-Type: application/atom+xml; charset=UTF-8
Cache-Control: max-age=0, must-revalidate, private
GData-Version: 1.0
Location: http://www.google.com/base/feeds/items/7157176425369705615
Content-Location: http://www.google.com/base/feeds/items/7157176425369705615
Transfer-Encoding: chunked
Date: Tue, 28 Oct 2008 23:20:43 GMT
X-Content-Type-Options: nosniff
Server: GFE/1.3

<?xml version='1.0' encoding='UTF-8'?>
  <entry xmlns='http://www.w3.org/2005/Atom' xmlns:gm='http://base.google.com/ns-metadata/1.0' xmlns:g='http://base.google.com/ns/1.0' xmlns:batch='http://schemas.google.com/gdata/batch'>
    <id>http://www.google.com/base/feeds/items/7157176425369705615</id>
    <published>2008-10-28T23:20:43.000Z</published>
    <updated>2008-10-28T23:20:43.000Z</updated>
    <category scheme='http://base.google.com/categories/itemtypes' term='custitem'/>
    <title type='text'>Test title</title>
    <content type='html'>Содержимое. some content</content>
    <link rel='alternate' type='text/html' href='http://base.google.com/base/a/sobolev.peter/4899062/D7157176425369705615'/>
    <link rel='self' type='application/atom+xml' href='http://www.google.com/base/feeds/items/7157176425369705615'/>
    <link rel='edit' type='application/atom+xml' href='http://www.google.com/base/feeds/items/7157176425369705615'/>
    <author>
      <name>frog</name>
      <email>frog@enlight.com</email>
    </author>
    <g:target_country type='text'>US</g:target_country>
    <g:expiration_date type='dateTime'>2038-01-19T03:14:07Z</g:expiration_date>
    <g:customer_id type='int'>4899062</g:customer_id>
    <g:item_type type='text'>custitem</g:item_type>
    <g:custattr type='int'>5</g:custattr>
    <g:item_language type='text'>en</g:item_language>
    <gd:feedLink xmlns:gd='http://schemas.google.com/g/2005' rel='media' href='http://www.google.com/base/feeds/items/7157176425369705615/media' countHint='0'/>
  </entry>


Пример выборки (на самом деле - поиска):

GET /base/feeds/snippets?bq=winmobile&max-results=2&start-index=456
Content-Type: application/atom+xml
Authorization: AuthSub token="censored"
X-Google-Key: key=censored

Т.е. здесь выбираются все значения имеющие в каких-нибудь полях строку "winmobile" , причем берутся только две записи, начиная с 456-й.

Ответ сервера:

200 OK
Content-Type: application/atom+xml; charset=UTF-8
Cache-Control: max-age=0, must-revalidate, private
GData-Version: 1.0
Last-Modified: Tue, 28 Oct 2008 23:45:17 GMT
Transfer-Encoding: chunked
Date: Tue, 28 Oct 2008 23:45:17 GMT
X-Content-Type-Options: nosniff
Server: GFE/1.3

<?xml version='1.0' encoding='UTF-8'?>
  <feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gm='http://base.google.com/ns-metadata/1.0' xmlns:g='http://base.google.com/ns/1.0' xmlns:batch='http://schemas.google.com/gdata/batch'>
    <id>http://www.google.com/base/feeds/snippets</id>
    <updated>2008-10-28T23:45:17.343Z</updated>
    <title type='text'>Items matching query: winmobile</title>
    <link rel='alternate' type='text/html' href='http://base.google.com'/>
    <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.google.com/base/feeds/snippets'/>
    <link rel='http://schemas.google.com/g/2005#batch' type='application/atom+xml' href='http://www.google.com/base/feeds/snippets/batch'/>
    <link rel='self' type='application/atom+xml' href='http://www.google.com/base/feeds/snippets?start-index=456&amp;max-results=2&amp;bq=winmobile'/>
    <link rel='previous' type='application/atom+xml' href='http://www.google.com/base/feeds/snippets?start-index=454&amp;max-results=2&amp;bq=winmobile'/>
    <link rel='next' type='application/atom+xml' href='http://www.google.com/base/feeds/snippets?start-index=458&amp;max-results=2&amp;bq=winmobile'/>
    <author>
      <name>Google Inc.</name>
      <email>base@google.com</email>
    </author>
    <generator version='1.0' uri='http://base.google.com'>GoogleBase</generator>
    <openSearch:totalResults>537</openSearch:totalResults>
    <openSearch:startIndex>456</openSearch:startIndex>
    <openSearch:itemsPerPage>2</openSearch:itemsPerPage>
    <entry>
      <id>http://www.google.com/base/feeds/snippets/12936865166524013370</id>
      <published>2008-10-14T04:30:00.000Z</published>
      <updated>2008-10-27T04:30:00.000Z</updated>
      <category scheme='http://base.google.com/categories/itemtypes' term='Jobs'/>
      <title type='text'>Multimedia Embedded Software Engineer - Windows Mobile, WinCE</title>
      <content type='html'>Job DescriptionQCT is looking for experienced Windows multimedia application developers with embedded (ARM) software development background. Specifically, the position involves developing embedded software supporting the camera, imaging, audio and  ...</content>
      <link rel='alternate' type='text/html' href='http://careers.diversityinc.com/careers/jobsearch/detail?jobId=5245979&amp;source=google'/>
      <link rel='self' type='application/atom+xml' href='http://www.google.com/base/feeds/snippets/12936865166524013370'/>
      <author>
        <name>DiversityInc Careers</name>
      </author>
      <g:job_function type='text'>Multimedia Embedded Software Engineer - Windows Mobile, WinCE</g:job_function>
      <g:id type='text'>5245979</g:id>
      <g:target_country type='text'>US</g:target_country>
      <g:job_type type='text'>full-time</g:job_type>
      <g:location type='location'>San Diego, California</g:location>
      <g:expiration_date type='dateTime'>2008-11-03T04:30:00Z</g:expiration_date>
      <g:employer type='text'>Qualcomm</g:employer>
      <g:education type='text'>bachelors</g:education>
      <g:customer_id type='int'>1246992</g:customer_id>
      <g:item_language type='text'>EN</g:item_language>
      <g:item_type type='text'>Jobs</g:item_type>
    </entry>
    <entry>
      <id>http://www.google.com/base/feeds/snippets/12929732690280841925</id>
      <published>2008-10-15T15:00:00.000Z</published>
      <updated>2008-10-28T02:00:00.000Z</updated>
      <category scheme='http://base.google.com/categories/itemtypes' term='Produkte'/>
      <title type='text'>iPAQ 914c Business Messenger - Windows Mobile 6.0 Professional - PXA270 520 MHz</title>
      <content type='html'>HEWLETT PACKARD HP iPAQ914c Busin Mess PXA270 416MHz 2,46Zoll 128MBRAM 256MBROM USB2 MicroSD GSM GPRS EDGE WiFi BT2 GPS 3MPCAM WINMobile 6 PRO (DE), HP iPAQ 914c Business Messenger - Windows Mobile 6.0 Professional - PXA270 520 MHz - RAM: 128 MB -  ...</content>
      <link rel='alternate' type='text/html' href='http://www.boh24.com/Telekommunikation/iPAQ-914c-Business-Messenger-Windows-Mobile-60-Professional-PXA270-520-MHz::104327.html?referer=froogle&amp;language=de'/>
      <link rel='self' type='application/atom+xml' href='http://www.google.com/base/feeds/snippets/12929732690280841925'/>
      <author>
        <name>shop@boh24.com</name>
      </author>
      <g:id type='text'>104327</g:id>
      <g:target_country type='text'>DE</g:target_country>
      <g:preis type='floatUnit'>468.86 eur</g:preis>
      <g:expiration_date type='dateTime'>2008-11-27T02:00:00Z</g:expiration_date>
      <g:image_link type='url'>http://www.boh24.com/images/product_images/original_images/dci_img.php?PID=ebaf6fa9D_I589473&amp;x=DCI</g:image_link>
      <g:marke type='text'>HP</g:marke>
      <g:customer_id type='int'>4927148</g:customer_id>
      <g:item_type type='text'>Produkte</g:item_type>
      <g:item_language type='text'>DE</g:item_language>
    </entry>
  </feed>


Есть еще Structured query, где можно указать из каких полей производится выборка, условия и т.д.

Поэкспериментировать можно здесь (там запросы посылаются через JS API прямо из веб-формы).

Данные можно публиковать также и через вебинтерфейс.

P.S. ну до чего же глючный в ЖЖ rich text редактор!