I using blogger api in my android app to integrate blogger content with it by using the REST APIs, as a JSON's objects.
I need to retrieve/filter posts by a label. In most blogs the link of blog's label it usually is
https://abtallaldigital.blogspot.com/search/label/Food
https://abtallaldigital.blogspot.com/search/label/Technology
I read all API documentation and I see it's deal with Blogs, Posts, Comments, Pages, Users but there's nothing to handle labels/categories in it.
There's a class BloggerAPI in the app that's used to retrieve blogs
package abtallaldigital.blogspot.com.dummyapp;
import retrofit2.Call;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.http.GET;
import retrofit2.http.Url;
public class BloggerAPI {
public static final String BASE_URL =
"https://www.googleapis.com/blogger/v3/blogs/2399953/posts/";
public static final String KEY = "THE-KEY";
public static PostService postService = null;
public static PostService getService() {
if (postService == null) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
postService = retrofit.create(PostService.class);
}
return postService;
}
public interface PostService {
@GET
Call<PostList> getPostList(@Url String url);
}
}
It is used thus
private void getData(){
String url = BloggerAPI.BASE_URL + "?key=" + BloggerAPI.KEY;
if(token != ""){
url = url+ "&pageToken="+token;
}
if(token == null){
return;
}
final Call<PostList> postList = BloggerAPI.getService().getPostList(url);
postList.enqueue(new Callback<PostList>() {
@Override
public void onResponse(Call<PostList> call, Response<PostList> response) {
PostList list = response.body();
token = list.getNextPageToken();
items.addAll(list.getItems());
adapter.notifyDataSetChanged();
Toast.makeText(MainActivity.this, "Sucess", Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(Call<PostList> call, Throwable t) {
Toast.makeText(MainActivity.this,"Error occured",Toast.LENGTH_LONG).show();
Log.i(TAG, "onFailure: "+t.toString());
}
});
}
I googling for how to get a link of RSS Feed for any label and I found this result
https://example.blogspot.com/feeds/posts/default/-/label/?alt=rss
this will gets the blog posts of any label with replacing the word "label" in the link
Search query (q=) option
If you want to get posts with a specific label you could use this query:
GET https://www.googleapis.com/blogger/v3/blogs/2399953/posts/search?q=label:label1&key=THE-KEY
If you want to get posts that are labelled 'this' as well as 'that' (if one of them does not match, it's not a match) you could use:
GET https://www.googleapis.com/blogger/v3/blogs/2399953/posts/search?q=label:this+label:that&key=THE-KEY
Use quotes around labels with spaces:
GET https://www.googleapis.com/blogger/v3/blogs/15045980/posts/search?q=label%3A%22James+Whittaker%22&key=THE-KEY
Probably a better option to get posts by label
Source: https://developers.google.com/blogger/docs/3.0/reference/posts/list
HTTP-request:
GET https://www.googleapis.com/blogger/v3/blogs/blogId/posts
Amongst the optional parameters there is the labels parameter:
labels string Comma-separated list of labels to search for.
Example HTTP-request (using the Google Testing Blog's blogId):
GET https://www.googleapis.com/blogger/v3/blogs/15045980/posts?labels=James+Whittaker&key=THE-KEY
Note that quotes around the label should not be included using this option.
To fetch the next page of posts store the given nextPageToken, as mentioned in the comments, and put it in the pageToken-parameter, like:
GET https://www.googleapis.com/blogger/v3/blogs/15045980/posts?labels=James+Whittaker&pageToken=CgkIChiAjpb65CUQ3KqWBw&key=THE-KEY
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With