2009-09-16 21 views
5

私はGoogleリーダーのクライアントで作業しています。 "starred"や "read"などのタグを追加するエントリを編集することはできないという点を除いて、すべてうまく動作します。 code.google.com/p/pyrfeed/wiki/GoogleReaderAPIとwww.niallkennedy.com/blog/2005/12/google-reader-api.htmlの手順が古くなっているようです。もっと奇妙なのは、私自身が使っているPOSTデータを調べて、それを正確に複製しようとしていることですが、それでも動作させることはできません。たとえば、http://www.google.com/reader/api/0/edit-tagのPOSTデータの場合は、/ user/-/state/com.google/starred & async = true & s = [フィード] & i = [item] & T = [token ]GoogleリーダーAPIで読み取ったアイテムにマークを付けるにはどうすればよいですか?

これはまさにgoogle自体と同じようですが、私はいつも "無効なストリーム名"を取得しています。何かアドバイス?

+0

ありがとう。 –

+0

あなたのリクエストを認証していないと思うので、 '/ user/-/state/...'は無効なストリーム応答を返します。 –

+0

あなたはどのような環境でアプリケーションを書いていますか?あなたは、あなたが(1)ログインしていることを確認し、コールするときにSIDクッキーをGoogleに戻すことを望むでしょう。 (2)あなたがURL文字列に置いた値をurl-encodingしていることを確認してください。 –

答えて

3

私はあなたに決定的な答えはありませんが、API api/0/edit-tagにも問題がありました。

APIの他の部分(api/0/stream/items/ids、api/0/unread-count)を既に使用していましたが、これは簡単には動作しませんでした。

しばらくすると、Googleフロントエンド(Chrome開発ツールを使用して)からGoogleリーダーに送信されたリクエストを調べ、ハードコードされた例を作成しました(このコードを使用できます。ストリームにはfeed /、idにはgoogle.com、2005:reader/item /というタグが必要です。ここ

 String authToken = getGoogleAuthKey(); 
     // I use Jsoup for the requests, but you can use anything you 
     // like - for jsoup you usually just need to include a jar 
     // into your java project 
    Document doc = Jsoup.connect("http://www.google.com/reader/api/0/edit-tag") 
     .header("Authorization", _AUTHPARAMS + authToken) 
     .data(
        // you don't need the userid, the '-' will suffice 
       "a", "user/-/state/com.google/read", 
       "async", "true", 
       "s", "feed/http://www.gizmodo.com/index.xml", 
       "i", "tag:google.com,2005:reader/item/1a68fb395bcb6947", 
       "T", "//wF1kyvFPIe6JiyITNnMWdA" 
     ) 
     // I also send my API key, but I don't think this is mandatory 
     .userAgent("[YOUR_APP_ID_GOES_HERE].apps.googleusercontent.com") 
     .timeout(10000) 
     // don't forget the post! (using get() will not work) 
     .**post()**; 

は、リードとしてストリームから特定のアイテムをマーキングするための私の最終的なコードは、(translateToItemAtomId方法は原子XMLにAPI/0 /ストリーム/商品/ IDSによって返される長整数IDを変換するために使用されていますこのAPIによって受け入れIDS):

 String authToken = getGoogleAuthKey(); 
    Document doc = Jsoup.connect("http://www.google.com/reader/api/0/edit-tag") 
     .header("Authorization", _AUTHPARAMS + authToken) 
     .data(
       "a", "user/-/state/com.google/read", 
       "async", "true", 
       "s", stream, 
       "i", translateToItemAtomId(itemId), 
       "T", getGoogleToken(authToken) 
     ) 
     .userAgent("[YOUR_APP_ID_GOES_HERE].apps.googleusercontent.com") 
     .timeout(10000).post(); 

あなたは)http://www.chrisdadswell.co.uk/android-coding-example-authenticating-clientlogin-google-reader-api/に基づいて(必要があるかもしれないいくつかの余分なコード:

private static final String _AUTHPARAMS = "GoogleLogin auth="; 
private static final String _GOOGLE_LOGIN_URL = "https://www.google.com/accounts/ClientLogin"; 
private static final String _READER_BASE_URL = "http://www.google.com/reader/"; 
private static final String _API_URL = _READER_BASE_URL + "api/0/"; 
private static final String _TOKEN_URL = _API_URL + "token"; 
private static final String _USER_INFO_URL = _API_URL + "user-info"; 
private static final String _USER_LABEL = "user/-/label/"; 
private static final String _TAG_LIST_URL = _API_URL + "tag/list"; 
private static final String _EDIT_TAG_URL = _API_URL + "tag/edit"; 
private static final String _RENAME_TAG_URL = _API_URL + "rename-tag"; 
private static final String _DISABLE_TAG_URL = _API_URL + "disable-tag"; 
private static final String _SUBSCRIPTION_URL = _API_URL 
     + "subscription/edit"; 
private static final String _SUBSCRIPTION_LIST_URL = _API_URL 
     + "subscription/list"; 

public static String getGoogleAuthKey() throws IOException { 
    String _USERNAME = "[email protected]"; 
    String _PASSWORD = "USER_PASSWORD"; 

    Document doc = Jsoup 
      .connect(_GOOGLE_LOGIN_URL) 
      .data("accountType", "GOOGLE", "Email", _USERNAME, "Passwd", 
        _PASSWORD, "service", "reader", "source", 
        "[YOUR_APP_ID_GOES_HERE].apps.googleusercontent.com") 
      .userAgent("[YOUR_APP_ID_GOES_HERE].apps.googleusercontent.com") 
      .timeout(4000).post(); 

    // RETRIEVES THE RESPONSE TEXT inc SID and AUTH. We only want the AUTH 
    // key. 
    String _AUTHKEY = doc 
      .body() 
      .text() 
      .substring(doc.body().text().indexOf("Auth="), 
        doc.body().text().length()); 
    _AUTHKEY = _AUTHKEY.replace("Auth=", ""); 
    return _AUTHKEY; 
} 

// generates a token for edition, needed for edit-tag 
public static String getGoogleToken(String authToken) throws IOException { 
    Document doc = Jsoup.connect(_TOKEN_URL) 
      .header("Authorization", _AUTHPARAMS + getGoogleAuthKey()) 
      .userAgent("[YOUR_APP_ID_GOES_HERE].apps.googleusercontent.com") 
      .timeout(10000).get(); 

    // RETRIEVES THE RESPONSE TOKEN 
    String _TOKEN = doc.body().text(); 
    return _TOKEN; 
} 

は、この情報がお役に立てば幸い!

関連する問題