Google Reader API - пометить все как прочитанное

Я пытаюсь написать сценарий, который помечает все элементы моего фида как прочитанные в Google Reader. Это должно быть так же просто, как размещение 4 переменных в ссылке API. Однако единственный способ успешно выполнить HTTP POST в Google без возврата ошибки 400 - это простой HTML FORM POST, как показано ниже. Я пробовал PHP cURL, но я получаю сообщение об ошибке 400 от Google, в котором говорится, что я сделал неверный клиентский запрос.

<form method="post" action="http://www.google.com/reader/api/0/mark-all-as-read">
   <input type="hidden" name="s" value="user/10408189040522127442/state/com.google/reading-list" />
   <input type="hidden" name="t" value="Your reading list" />
   <input type="hidden" name="ts" value="<?php echo time(); ?>" />
   <input type="hidden" name="T" value="<?php session_start(); echo $_SESSION['token']; ?>" />                
   <input type="button" value="Mark All As Read" /></form>

Отправка тех же сведений с помощью HTML FORM (как я пытался с cURL) работает нормально, успешно помечает все элементы как прочитанные, но поскольку FORM ACTION настроен на внешний сайт, вы будете перенаправлены на него при отправке. Чтобы обойти это, я попытался отправить AJAX FORM следующим образом, поэтому перенаправления нет, но это не работает и ничего не отправляется.

$(document).ready(function(){
    $("input[type=button]").click(function() {
        $.post($('form').attr("action"), $('form').formSerialize()); 
    });
});

Кто-нибудь может посоветовать? 1) Почему cURL POST не работает, а простой HTML FORM POST работает? 2) Почему я не могу (молча) отправить HTML-ФОРМУ с отправкой AJAX?


person Jonathan Goode    schedule 23.12.2010    source источник


Ответы (2)


Google может потребовать установить определенные заголовки при отправке сообщения, поэтому он может отвечать с ошибкой 400. Убедитесь, что те же заголовки, которые отправляются с использованием базового <form>, также установлены при отправке с использованием cURL.

Кроме того, причина, по которой вы не можете отправить $ .post () в Google, связана с той же политикой происхождения .

person Sarah    schedule 23.12.2010

Google действительно требует дополнительный заголовок для каждого сообщения, и некоторые из них получают.

curl_setopt ($ ch, CURLOPT_HTTPHEADER, array ('Авторизация: GoogleLogin auth ='. $ auth));

чтобы получить аутентификацию, вам нужно нажать https://www.google.com/accounts/ClientLogin

Взгляните на этот ответ, Google Reader API?

person smilbandit    schedule 26.12.2010