gpt4 book ai didi

google-reader - 如何标记使用谷歌阅读器 API 阅读的项目?

转载 作者:行者123 更新时间:2023-12-04 19:43:46 25 4
gpt4 key购买 nike

我一直在为谷歌阅读器开发一个客户端。一切正常,除了我无法编辑条目以添加诸如“已加星标”和“已读”之类的标签。 code.google.com/p/pyrfeed/wiki/GoogleReaderAPI 和 www.niallkennedy.com/blog/2005/12/google-reader-api.html 上的说明似乎已经过时。更奇怪的是,我一直在检查 google 本身使用的 POST 数据并试图准确复制它,但我仍然无法让它工作。例如,我最接近的是 http://www.google.com/reader/api/0/edit-tag使用 POST 数据 a=/user/-/state/com.google/starred&async=true&s=[feed]&i=[item]&T=[token]

这似乎正是谷歌本身所做的,但我总是得到“无效的流名称”。有什么建议吗?

最佳答案

我没有给你一个明确的答案,但我在 API api/0/edit-tag 上也遇到了一些问题,并设法让它们工作。

我已经在使用 API 的其他部分而没有任何问题(api/0/stream/items/ids、api/0/unread-count),但是这部分工作起来并不容易。

一段时间后,我通过检查他们的网络前端(使用 Chrome 开发工具)发送到 Google 阅读器的请求重新开始,并制作了一个硬编码示例(您可以使用此代码,您只需要为您自己更改 id 和流- 请注意它们具有所有需要的前缀:用于流的 feed/和用于 id 的 tag: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 方法用于将 api/0/stream/items/ids 返回的长整数 id 转换为该 API 接受的 atom xml id):
        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 = "USER_EMAIL@gmail.com";
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;
}

希望这可以帮助!

关于google-reader - 如何标记使用谷歌阅读器 API 阅读的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1434146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com