Итак, это мой первый вопрос в StackOverflow, поэтому, пожалуйста, дайте мне знать, есть ли что-то, к чему я пренебрег!Образец кода Blogger API
Я пытаюсь получить данные блога из общедоступных блогов Blogger для некоторых исследований анализа языка, которые я делаю. Хотя API-интерфейс java выглядит довольно прямолинейно, я обнаружил, что образец кода Google в https://developers.google.com/blogger/docs/3.0/reference/posts/list#examples не работает, так как существует много отсутствующих зависимостей, от LocalServerReceiver() до целого множества зависимостей, необходимых для OAuthorization. Исследователь API работает отлично, но, очевидно, мне нужно что-то для моего собственного кода.
Я также пытался использовать фрагменты кода из других вопросов StackOverflow, которые, как я видел, были похожи на мои, и я все еще сталкиваюсь с проблемами зависимости.
Вот список некоторых из вопросов, который я смотрел, которые не решить мою проблему из-за какого-то кода устаревания:
Why does Java not allow me to use OAuth2Native methods here?
- Authenticate own Google account for Blogger API with Java
Я использовал OAuthPlayground для получить код авторизации и пытались воспроизвести некоторые функциональные возможности решения iamkhova в Proper Form of API request to Blogger using Java/App Engine -error 401. Обратите внимание, что я на самом деле не пытаюсь писать что-либо в любом из блогов, к которым я обращаюсь. Я просто хочу получить данные для анализа.
В настоящее время я только что изменил решение iamkhova, вытащив регистратор и добавив функцию getPosts(), которая дублирует то, что мне нужно от образца кода Google.
public class BlogHandler
{
static final String API_KEY = {My API Key};
public Blogger blogger = null;
public Blog blog;
public java.util.List<Post> posts;
public BlogHandler() {}
public void executeGetBlogByUrl (String url) throws IOException {
GetByUrl request = blogger.blogs().getByUrl(url);
this.blog = request.setKey(API_KEY).execute();
}
public void getPosts() throws IOException
{
List postsListAction = blogger.posts().list(this.blog.getId());
// Restrict the result content to just the data we need.
postsListAction.setFields("items(author/displayName,content,published,title,url),nextPageToken");
// This step sends the request to the server.
PostList posts = postsListAction.execute();
// Now we can navigate the response.
int postCount = 0;
int pageCount = 0;
while (posts.getItems() != null && !posts.getItems().isEmpty()) {
for (Post post : posts.getItems()) {
System.out.println("Post #"+ ++postCount);
System.out.println("\tTitle: "+post.getTitle());
System.out.println("\tAuthor: "+post.getAuthor().getDisplayName());
System.out.println("\tPublished: "+post.getPublished());
System.out.println("\tURL: "+post.getUrl());
System.out.println("\tContent: "+post.getContent());
}
// Pagination logic
String pageToken = posts.getNextPageToken();
if (pageToken == null || ++pageCount >= 5) {
break;
}
System.out.println("-- Next page of posts");
postsListAction.setPageToken(pageToken);
posts = postsListAction.execute();
}
}
public void setupService() throws IOException {
AppIdentityCredential credential = null;
credential = new AppIdentityCredential(Arrays.asList(BloggerScopes.BLOGGER)); // Add your scopes here
this.blogger = new Blogger.Builder(new UrlFetchTransport(), new JacksonFactory(), credential).setApplicationName("chsBlogResearch").build();
}
}
В настоящее время у меня следующее сообщение об ошибке:
Exception in thread "main" com.google.apphosting.api.ApiProxy$CallNotFoundException: The API package 'memcache' or call 'Get()' was not found.
at com.google.apphosting.api.ApiProxy$1.get(ApiProxy.java:173)
at com.google.apphosting.api.ApiProxy$1.get(ApiProxy.java:171)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:89)
at com.google.appengine.api.memcache.MemcacheServiceImpl.quietGet(MemcacheServiceImpl.java:26)
at com.google.appengine.api.memcache.MemcacheServiceImpl.get(MemcacheServiceImpl.java:49)
at com.google.appengine.api.appidentity.AppIdentityServiceImpl.getAccessToken(AppIdentityServiceImpl.java:286)
at com.google.api.client.googleapis.extensions.appengine.auth.oauth2.AppIdentityCredential.intercept(AppIdentityCredential.java:98)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:859)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
at BloggerData.BlogHandler.executeGetBlogByUrl(BlogHandler.java:29)
нажав на строки кода для обеих ошибок в MemcacheServiceImpl и AppIdentityServiceImpl сказать мне, что нет строк кода в этой точке. Я использую Maven в Eclipse для зависимостей.
Единственное, о чем я не уверен в этом коде, это идея областей, но я не думаю, что это должно было вызывать ошибки.
Я был бы признателен за любые идеи по этому поводу, поскольку получение этих данных было более трудоемким, чем я думал, что это будет!
Обновление: getting strange exception trying to implement asynchronous http in google app engine for java предоставил немного больше информации об ошибке выше. По-видимому, эту банку ApiProxy нельзя вызвать через консольное приложение.
Что вы передаете как метод executeGetBlogByUrl()? – ManoDestra
В настоящее время это всего лишь строка URL-адреса случайного блога (не мой, только один для целей тестирования). Я проверил, что блог на самом деле был блогером Blogger. – tatertot
ManoDestra, по вашему вопросу, я решил попробовать лучший URL-адрес тестирования (тот, который на самом деле принадлежит мне) - вот блог: https://chstesting.blogspot.com/. – tatertot