java - 如何在 blogger api 中按标签获取博客文章
问题描述
我在我的 android 应用程序中使用博客 api通过使用 REST API 将博客内容与其集成,作为 JSON 的对象。
我需要按标签检索/过滤帖子。在大多数博客中,博客标签的链接通常是
https://abtallaldigital.blogspot.com/search/label/Food
https://abtallaldigital.blogspot.com/search/label/Technology
我阅读了所有 API 文档,发现它涉及博客、帖子、评论、页面、用户,但其中没有处理标签/类别的内容。
应用中有一个 BloggerAPI 类,用于检索博客
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);
}
}
它是这样使用的
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());
}
});
}
我在谷歌上搜索如何获取任何标签的 RSS 提要链接,我发现了这个结果
https://example.blogspot.com/feeds/posts/default/-/label/?alt=rss
这将通过替换链接中的“标签”一词来获取任何标签的博客文章
解决方案
搜索查询 (q=) 选项
如果您想获取带有特定标签的帖子,可以使用以下查询:
获取https://www.googleapis.com/blogger/v3/blogs/2399953/posts/search?q=label:label1&key=THE-KEY
如果您想获得标有“this”和“that”的帖子(如果其中一个不匹配,则不匹配),您可以使用:
获取https://www.googleapis.com/blogger/v3/blogs/2399953/posts/search?q=label:this+label:that&key=THE-KEY
在带空格的标签周围使用引号:
可能是按标签获取帖子的更好选择
来源:https ://developers.google.com/blogger/docs/3.0/reference/posts/list
HTTP请求:
GET https://www.googleapis.com/blogger/v3/blogs/blogId/posts
在可选参数中有一个labels
参数:
labels string Comma-separated list of labels to search for.
HTTP 请求示例(使用 Google 测试博客的 blogId):
获取https://www.googleapis.com/blogger/v3/blogs/15045980/posts?labels=James+Whittaker&key=THE-KEY
请注意,使用此选项时不应包含标签周围的引号。
如评论中所述,要获取帖子的下一页存储给定nextPageToken
的,并将其放在pageToken
-parameter 中,例如:
推荐阅读
- python - 从包含特殊特征的列表中删除元素,除非在另一个字符旁边
- java - 自定义 Swing 画布内的 mxGraph JButton?
- amazon-web-services - AWS 实例上的权限被拒绝(公钥)
- asp.net-core - 如何在带有 IdentityServer 的 ASP.NET Core 5.0 应用程序中实现验证码?
- javascript - Babel 更改异步错误
- css - SCSS 变量未全局应用
- docker - 使用可选参数化分支从 git 构建 Docker
- python - 如何在 APIRouter(不是 FastAPI)中对异常进行单元测试
- java - 在 Java 中存储千克的最佳数据类型是什么?
- android - 未解决的参考: Parcelable Kotlin