Also das ist meine erste Frage zu StackOverflow, also lass es mich wissen, wenn ich etwas vernachlässigt habe!Blogger API Beispielcode
Ich versuche, Blog-Post-Daten aus öffentlichen Blogger-Blogs für einige Sprachanalyse-Forschung, die ich mache, zu bekommen. Obwohl die Java-API recht einfach zu sein scheint, habe ich festgestellt, dass Googles Codebeispiel unter https://developers.google.com/blogger/docs/3.0/reference/posts/list#examples nicht funktioniert, da viele Abhängigkeiten fehlen, die von LocalServerReceiver() bis zu einer ganzen Reihe von Abhängigkeiten reichen, die für OAuthorization benötigt werden. Der API-Explorer funktioniert gut, aber offensichtlich brauche ich etwas für meinen eigenen Code.
Ich habe auch versucht, Codefragmente aus anderen StackOverflow-Fragen zu verwenden, die meiner Ansicht nach ähnlich waren und immer noch mit Abhängigkeitsproblemen konfrontiert sind.
Hier ist eine Liste von einigen der Fragen, die ich angeschaut habe, die mein Problem nicht gelöst haben aufgrund irgendeiner Art von Code deprecation:
Why does Java not allow me to use OAuth2Native methods here?
- Authenticate own Google account for Blogger API with Java
Ich habe den OAuthPlayground verwendet Holen Sie sich einen Autorisierungscode, und habe versucht, einige der Funktionen von iamkhova Lösung in Proper Form of API request to Blogger using Java/App Engine -error 401 zu replizieren. Beachte, dass ich nicht versuche, irgendwas in irgendeinen der Blogs zu schreiben, auf die ich zugreife. Ich möchte nur die Postdaten zur Analyse bekommen.
Zur Zeit habe ich gerade die Lösung von iamkhova geändert, indem ich den Logger weggenommen habe und eine getPosts() - Funktion hinzugefügt habe, die das, was ich brauche, aus dem Beispielcode von Google kopiert.
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();
}
}
Derzeit bin ich mit den folgenden Fehler:
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)
Ein Klick auf die Codezeilen für beide Fehler in MemcacheServiceImpl und AppIdentityServiceImpl mir sagen, dass es keine Codezeilen an diesem Punkt. Ich verwende Maven in Eclipse für Abhängigkeiten.
Die einzige Sache, über die ich mich in diesem Code nicht wirklich sicher bin, ist die Idee von Bereichen, aber ich denke nicht, dass das meine Fehler verursachen sollte.
Ich würde mich über jede Idee zu diesem Thema freuen, da es viel zeitaufwendiger war, diese Postdaten zu bekommen, als ich dachte!
Update: getting strange exception trying to implement asynchronous http in google app engine for java lieferte ein wenig mehr Einblick in den Fehler oben. Anscheinend kann dieses ApiProxy-Jar nicht über eine Konsolen-App aufgerufen werden.
Was übergeben Sie als URL an die Methode executeGetBlogByUrl()? – ManoDestra
Momentan ist es nur eine zufällige Blog-URL (nicht meine, sondern nur eine für Testzwecke). Ich habe zuerst überprüft, ob es sich bei dem Blog tatsächlich um einen Blogger-Blog handelt. – tatertot
ManoDestra, basierend auf Ihrer Frage, habe ich mich entschieden, eine bessere Test-URL zu testen (eine, die mir eigentlich gehört) - hier ist der Blog: https://chstesting.blogspot.com/. – tatertot