работа с google api на perl

Статус
В этой теме нельзя размещать новые ответы.

finist_nuc

Постоялец
Регистрация
31 Май 2008
Сообщения
57
Реакции
0
Народ, не могу понять как все-таки отправить запрос, в документации гугла есть такой пример:
Шаг 1 – Загрузка метаданных видео

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

POST /action/GetUploadToken HTTP/1.1
Host: gdata.youtube.com
Authorization: AuthSub token=<authentication_token>
X-GData-Client: <client_id>
X-GData-Key: key=<developer_key>
Content-Length: <content_length>
Content-Type: application/atom+xml; charset=UTF-8

API_XML_request

Переменные в запросе загрузки

В запрос HTTP POST необходимо включить несколько значений. Эти значения выделены в примере жирным шрифтом. Список ниже поясняет, как заполнять эти значения:

*

authentication_token – Это значение содержит маркер аутентификации вашего запроса. Это может быть маркер ClientLogin, одноразовый маркер AuthSub или маркер сеанса AuthSub.
*

client_id – (дополнительно) Это значение определяет приложение, делающее запрос API. Это значение используется для входа в систему и отладки. Получить ключ разработчика и идентификатор клиента можно здесь Для просмотра ссылки Войди или Зарегистрируйся.
*

developer_key – Это значение указывает разработчика YouTube, подающего запрос на добавление видео. Получить ключ разработчика и идентификатор клиента можно здесь Для просмотра ссылки Войди или Зарегистрируйся.
*

content_length – Это значение содержит длину, в байтах, всей основной части запроса HTTP POST.
*

API_XML_Request – Это значение содержит информацию о добавленном видеофайле с виде записи XML Atom. Ниже приведен пример запроса XML. Теги XML, используемые в записи, определены в Справочном руководстве.

В следующем примере – запрос HTTP POST, в котором заполнены все значения, кроме данных двоичного файла.

POST /action/GetUploadToken HTTP/1.1
Host: gdata.youtube.com
Authorization: AuthSub token=DXAA...sdb8
X-GData-Client: b1c4t9sl2159
X-GData-Key: key=adf15ee97731bca89da876c...a8dc
Content-Length: 1941255
Content-Type: application/atom+xml; charset=UTF-8

<?xml version="1.0"?>
<entry xmlns="http://www.w3.org/2005/Atom"
xmlns:media="http://search.yahoo.com/mrss/"
xmlns:yt="http://gdata.youtube.com/schemas/2007">
<media:group>
<media:title type="plain">Bad Wedding Toast</media:title>
<media:description type="plain">I gave a bad toast at my friend's wedding.</media:description>
<media:category scheme="http://gdata.youtube.com/schemas/2007/categories.cat">People</media:category>
<media:keywords>toast, wedding</media:keywords>
</media:group>
</entry>

Меня интересует вопрос, как этот запрос отправить на перле?, точнее как передать xml данные? или я вообще идею недопонял...
В догонку, откуда взять значение content_length?
 
как-то так:
PHP:
use LWP;
use URI::Escape;

my $ua=LWP::UserAgent->new();
my $client_id = 'b1c4t9sl2159';
my $authentication_token = 'DXAA...sdb8';
my $developer_key = 'adf15ee97731bca89da876c...a8dc';
my $query = qq~<?xml version="1.0"?>
<entry xmlns="http://www.w3.org/2005/Atom"
xmlns:media="http://search.yahoo.com/mrss/"
xmlns:yt="http://gdata.youtube.com/schemas/2007">
<media:group>
<media:title type="plain">Bad Wedding Toast</media:title>
<media:description type="plain">I gave a bad toast at my friend's wedding.</media:description>
<media:category scheme="http://gdata.youtube.com/schemas/2007/categories.cat">People</media:category>
<media:keywords>toast, wedding</media:keywords>
</media:group>
</entry>~;
$query = URI::Escape::uri_escape($query);

my $req = HTTP::Request->new(POST => 'http://gdata.youtube.com/action/GetUploadToken');
$req->header("Authorization" => "AuthSub token=$authentication_token");
$req->header("X-GData-Client" => $client_id);
$req->header("X-GData-Key" => "key=$developer_key");
$req->content_type('application/atom+xml; charset=UTF-8');
$req->content($query);
my $res = $ua->request( $req );

content_length тебе LWP в данном случае сам посчитает, это размер передаваемой информации (кроме заголовка) в байтах
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху