Skip to content

Commit 408635b

Browse files
committed
Merge branch '1.0.2' of https://github.com/raee/android-cnblogs into 1.0.2
2 parents c871557 + e5f6bb6 commit 408635b

File tree

12 files changed

+300
-4
lines changed

12 files changed

+300
-4
lines changed

sdk/src/androidTest/java/rae/com/cnblogs/sdk/BaseTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ protected void autoLogin() {
4444
String url = "www.cnblogs.com";
4545
CookieManager cookieManager = CookieManager.getInstance();
4646
cookieManager.removeAllCookie();
47-
cookieManager.setCookie(url, ".CNBlogsCookie=0922AD7D418324B66C0A8A363EB224DA99247FA6A4C6CC60BC6FAB2487D35CE07224CA0CFC44A98B4691A9474AFB12559B3A8B881EABBCF76F9C3BE44295739B4F38D9F382ECE1B8FD2217CF4D731C81977DD9B0; domain=.cnblogs.com; expires=Fri, 07-Jul-2017 11:01:57 GMT; path=/; HttpOnly");
48-
cookieManager.setCookie(url, ".Cnblogs.AspNetCore.Cookies=CfDJ8PhlBN8IFxtHhqIV3s0LCDlIlVzo-JtdoAJZpM5efI0M21VjySKRmE_LqL1kpnDotIQHtbrxOzGSkWWDRHathr9hmjPlV7M-FwiXaUJbXp9UU2jTEk3iMLmCL3gzIHHbKQ24nFj3SxD4JyIPfjuGnTo8ZzPJoLACtNEat1UDOQet8M3rdkMogzJNxtnr8ZhsikiMisKIdb1YzZ3jNX2lw2KD9GQxG2oFDtsIv-w0Y5JlJCZ_2G2Y9YRS1OcI5OKhN_RNLmY3c8aVe9Q0ajrmGLqmDBP4HaQk_u3r5Uk-SQpWvddw262cAo9l85rlQ8b1Aw; domain=.cnblogs.com; expires=Fri, 07-Jul-2017 11:01:57 GMT; path=/; HttpOnly");
47+
cookieManager.setCookie(url, ".CNBlogsCookie=23C783112C89888B509652C2E962F88CF742E008BBD65B72381446683D73615B621C71846010E7A134A78DA4F421DDAC42AA504B70709D67283D0AEBAA274E4CD6D029D6DA9B089048AD24FE5D369F4B7261790536E75A2AC51883F533878D1EE20AA30B; domain=.cnblogs.com; path=/; HttpOnly");
48+
cookieManager.setCookie(url, ".Cnblogs.AspNetCore.Cookies=CfDJ8BMYgQprmCpNu7uffp6PrYZAlx7wnnFIHwWOK8_lsJJwLMVz-wlYX9HKRB146BmGnDk4Vt_azop7Ce64ouMrxCne5EjwlIZVp1azwx4ZgnLqOGRTfGEzFDMMpVRmEZ32MZaEBXSAJGl_PsOjdlPEJeAevz_WkwvF3BaD5wkAPQnpGhjnkL4HkN0YE_jztsJkZfaUAYBr6BEjALTy75OOH_7NLiLZmOg0tjodbckftsi4HtjRtHwX2T4imGGEOeC84VdYndayUwNNZVvEbX0nOd2jeHRjWYpr7YzxcgajVhUh; domain=.cnblogs.com; path=/; HttpOnly");
4949
cookieManager.flush();
5050
}
5151

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package rae.com.cnblogs.sdk;
2+
3+
import com.github.raee.runit.AndroidRUnit4ClassRunner;
4+
import com.rae.cnblogs.sdk.CnblogsApiFactory;
5+
import com.rae.cnblogs.sdk.api.IMomentApi;
6+
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
10+
/**
11+
* 闪存接口测试
12+
* Created by ChenRui on 2016/11/30 00:15.
13+
*/
14+
@RunWith(AndroidRUnit4ClassRunner.class)
15+
public class MomentApiTest extends BaseTest {
16+
17+
private IMomentApi mApi;
18+
19+
@Override
20+
public void setup() {
21+
super.setup();
22+
mApi = CnblogsApiFactory.getInstance(mContext).getMomentApi();
23+
}
24+
25+
@Test
26+
public void testPublish() throws InterruptedException {
27+
runTest("testPublish", mApi.publish("继续努力,加油!", 0));
28+
}
29+
30+
@Test
31+
public void testMoments() throws InterruptedException {
32+
runTest("testMoments", mApi.getMoments(IMomentApi.MOMENT_TYPE_FOLLOWING, 1, System.currentTimeMillis()));
33+
}
34+
35+
}

sdk/src/main/java/com/rae/cnblogs/sdk/CnblogsApiProvider.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.rae.cnblogs.sdk.api.IBookmarksApi;
77
import com.rae.cnblogs.sdk.api.ICategoryApi;
88
import com.rae.cnblogs.sdk.api.IFriendsApi;
9+
import com.rae.cnblogs.sdk.api.IMomentApi;
910
import com.rae.cnblogs.sdk.api.INewsApi;
1011
import com.rae.cnblogs.sdk.api.IRaeServerApi;
1112
import com.rae.cnblogs.sdk.api.ISearchApi;
@@ -104,6 +105,11 @@ public Retrofit getRetrofit() {
104105
*/
105106
public abstract ISearchApi getSearchApi();
106107

108+
/**
109+
* 获取闪存接口
110+
*/
111+
public abstract IMomentApi getMomentApi();
112+
107113
/**
108114
* 个人的接口
109115
*/

sdk/src/main/java/com/rae/cnblogs/sdk/DefaultCnblogsApiProvider.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.rae.cnblogs.sdk.api.IBookmarksApi;
77
import com.rae.cnblogs.sdk.api.ICategoryApi;
88
import com.rae.cnblogs.sdk.api.IFriendsApi;
9+
import com.rae.cnblogs.sdk.api.IMomentApi;
910
import com.rae.cnblogs.sdk.api.INewsApi;
1011
import com.rae.cnblogs.sdk.api.IRaeServerApi;
1112
import com.rae.cnblogs.sdk.api.ISearchApi;
@@ -64,6 +65,11 @@ public ISearchApi getSearchApi() {
6465
return mRetrofit.create(ISearchApi.class);
6566
}
6667

68+
@Override
69+
public IMomentApi getMomentApi() {
70+
return mRetrofit.create(IMomentApi.class);
71+
}
72+
6773
@Override
6874
public IRaeServerApi getRaeServerApi() {
6975
return mRetrofit.create(IRaeServerApi.class);

sdk/src/main/java/com/rae/cnblogs/sdk/api/ApiUrls.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,11 @@ final class ApiUrls {
104104
// 搜索-新闻-列表
105105
static final String API_SEARCH_NEWS_LIST = "http://zzk.cnblogs.com/s/news";
106106

107+
// 闪存-全站
108+
static final String API_MOMENT_LIST = "https://ing.cnblogs.com/ajax/ing/GetIngList?PageSize=30";
109+
110+
// 闪存-发布
111+
static final String API_MOMENT_PUBLISH = "https://ing.cnblogs.com/ajax/ing/Publish";
107112

108113
// 服务端接口地址
109114
// private static final String RAE_API_BASIC = "http://www.raeblog.com/cnblogs/index.php/";
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.rae.cnblogs.sdk.api;
2+
3+
import com.rae.cnblogs.sdk.Empty;
4+
import com.rae.cnblogs.sdk.JsonBody;
5+
import com.rae.cnblogs.sdk.Parser;
6+
import com.rae.cnblogs.sdk.bean.MomentBean;
7+
import com.rae.cnblogs.sdk.parser.MomentParser;
8+
9+
import java.util.List;
10+
11+
import io.reactivex.Observable;
12+
import retrofit2.http.Field;
13+
import retrofit2.http.FormUrlEncoded;
14+
import retrofit2.http.GET;
15+
import retrofit2.http.Headers;
16+
import retrofit2.http.POST;
17+
import retrofit2.http.Query;
18+
19+
/**
20+
* 闪存接口
21+
* Created by ChenRui on 2017/9/25 0025 17:01.
22+
*/
23+
public interface IMomentApi {
24+
25+
/**
26+
* 全站闪存
27+
*/
28+
String MOMENT_TYPE_ALL = "All";
29+
30+
/**
31+
* 关注的闪存
32+
*/
33+
String MOMENT_TYPE_FOLLOWING = "following";
34+
35+
/**
36+
* 我自己的闪存
37+
*/
38+
String MOMENT_TYPE_MY = "my";
39+
40+
/**
41+
* 发布闪存
42+
* [官方不支持图文模式]
43+
*
44+
* @param content 发表内容
45+
* @param publicFlag 取值:1为公开,0为私有
46+
* @return
47+
*/
48+
49+
@POST(ApiUrls.API_MOMENT_PUBLISH)
50+
@FormUrlEncoded
51+
@Headers({JsonBody.CONTENT_TYPE, JsonBody.XHR})
52+
Observable<Empty> publish(@Field("content") String content, @Field("publicFlag") int publicFlag);
53+
54+
/**
55+
* 获取闪存列表
56+
*
57+
* @param type 类型,参考静态变量MOMENT_TYPE_*,如:{@link #MOMENT_TYPE_ALL}
58+
* @param page 页码
59+
* @param timestamp 传当前的时间戳
60+
*/
61+
@GET(ApiUrls.API_MOMENT_LIST)
62+
@Headers({JsonBody.XHR})
63+
@Parser(MomentParser.class)
64+
Observable<List<MomentBean>> getMoments(@Query("IngListType") String type, @Query("PageIndex") int page, @Query("_") long timestamp);
65+
66+
67+
}
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package com.rae.cnblogs.sdk.bean;
2+
3+
import java.util.List;
4+
5+
/**
6+
* 闪存
7+
* Created by ChenRui on 2017/9/25 0025 17:03.
8+
*/
9+
public class MomentBean {
10+
11+
// 标志
12+
private String id;
13+
14+
// 作者昵称
15+
private String authorName;
16+
17+
// 作者头像
18+
private String avatar;
19+
20+
private String blogApp;
21+
22+
// 发布时间
23+
private String postTime;
24+
25+
// 回复作者名称
26+
private String replyName;
27+
28+
// 回复作者blogApp
29+
private String replyBlogApp;
30+
31+
private String content;
32+
33+
// 回复的评论
34+
private List<MomentBean> comments;
35+
36+
public String getContent() {
37+
return content;
38+
}
39+
40+
public void setContent(String content) {
41+
this.content = content;
42+
}
43+
44+
public String getId() {
45+
return id;
46+
}
47+
48+
public void setId(String id) {
49+
this.id = id;
50+
}
51+
52+
public String getAuthorName() {
53+
return authorName;
54+
}
55+
56+
public void setAuthorName(String authorName) {
57+
this.authorName = authorName;
58+
}
59+
60+
public String getAvatar() {
61+
return avatar;
62+
}
63+
64+
public void setAvatar(String avatar) {
65+
this.avatar = avatar;
66+
}
67+
68+
public String getBlogApp() {
69+
return blogApp;
70+
}
71+
72+
public void setBlogApp(String blogApp) {
73+
this.blogApp = blogApp;
74+
}
75+
76+
public String getPostTime() {
77+
return postTime;
78+
}
79+
80+
public void setPostTime(String postTime) {
81+
this.postTime = postTime;
82+
}
83+
84+
public String getReplyName() {
85+
return replyName;
86+
}
87+
88+
public void setReplyName(String replyName) {
89+
this.replyName = replyName;
90+
}
91+
92+
public String getReplyBlogApp() {
93+
return replyBlogApp;
94+
}
95+
96+
public void setReplyBlogApp(String replyBlogApp) {
97+
this.replyBlogApp = replyBlogApp;
98+
}
99+
100+
101+
public List<MomentBean> getComments() {
102+
return comments;
103+
}
104+
105+
public void setComments(List<MomentBean> comments) {
106+
this.comments = comments;
107+
}
108+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
//package com.rae.cnblogs.sdk.bean;
2+
//
3+
///**
4+
// * 主要的闪存
5+
// * Created by ChenRui on 2017/9/25 0025 17:09.
6+
// */
7+
//public class MomentPrimaryBean extends MomentBean {
8+
//
9+
//}

sdk/src/main/java/com/rae/cnblogs/sdk/converter/TextResponseBodyConverter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,9 @@ private T json2Entity(String text) throws IOException {
146146
if (obj.has("success")) {
147147
isSuccess = obj.getBoolean("success");
148148
}
149+
if (obj.has("isSuccess")) {
150+
isSuccess = obj.getBoolean("isSuccess"); // 发布闪存返回的字段
151+
}
149152
if (obj.has("Message")) {
150153
message = obj.getString("Message");
151154
}

sdk/src/main/java/com/rae/cnblogs/sdk/interceptor/RequestInterceptor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ public RequestInterceptor(Context context) {
4646
CookieSyncManager.createInstance(context.getApplicationContext());
4747
try {
4848
this.packageName = context.getPackageName();
49-
PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_META_DATA);
50-
this.versionName = packageInfo.versionName;
49+
PackageInfo packageInfo = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_META_DATA);
50+
this.versionName = packageInfo.versionName == null ? "0.0.0" : packageInfo.versionName;
5151
this.versionCode = packageInfo.versionCode;
5252
} catch (Exception e) {
5353
this.versionName = "1.0.0";
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.rae.cnblogs.sdk.parser;
2+
3+
import android.text.TextUtils;
4+
5+
import com.rae.cnblogs.sdk.bean.MomentBean;
6+
import com.rae.cnblogs.sdk.utils.ApiUtils;
7+
8+
import org.jsoup.nodes.Document;
9+
import org.jsoup.nodes.Element;
10+
import org.jsoup.select.Elements;
11+
12+
import java.io.IOException;
13+
import java.util.ArrayList;
14+
import java.util.List;
15+
16+
/**
17+
* 闪存解析器
18+
* Created by ChenRui on 2017/9/25 0025 17:16.
19+
*/
20+
public class MomentParser implements IHtmlParser<List<MomentBean>> {
21+
22+
@Override
23+
public List<MomentBean> parse(Document doc, String html) throws IOException {
24+
List<MomentBean> result = new ArrayList<>();
25+
26+
Elements elements = doc.select(".entry_a");
27+
elements.addAll(doc.select(".entry_b"));
28+
29+
for (Element element : elements) {
30+
MomentBean m = new MomentBean();
31+
String id = ApiUtils.getNumber(element.select(".feed_body").attr("id"));
32+
if (TextUtils.isEmpty(id)) continue; // 跳过ID为空的
33+
34+
m.setId(id); // 主键
35+
m.setAuthorName(element.select(".ing-author").text()); // 作者名称
36+
m.setAvatar(ApiUtils.getUrl(element.select(".feed_avatar a img").attr("src"))); //头像地址
37+
m.setContent(element.select(".ing_body").text()); // 内容
38+
m.setPostTime(element.select(".ing_time").text()); // 发布时间
39+
m.setBlogApp(ApiUtils.getBlogApp(element.select(".ing-author").attr("href"))); // blogApp
40+
41+
result.add(m);
42+
}
43+
44+
45+
return result;
46+
}
47+
}

sdk/src/main/java/com/rae/cnblogs/sdk/utils/ApiUtils.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.rae.cnblogs.sdk.utils;
22

33
import android.annotation.SuppressLint;
4+
import android.net.Uri;
45
import android.text.TextUtils;
56
import android.util.Log;
67

@@ -121,6 +122,15 @@ public static String getCount(String text) {
121122

122123
public static String getBlogApp(String authorUrl) {
123124
if (authorUrl == null) return null;
125+
if (authorUrl.contains("home.cnblogs.com")) {
126+
try {
127+
authorUrl = authorUrl.replace("//", "http://");
128+
Uri uri = Uri.parse(authorUrl);
129+
return uri.getLastPathSegment();
130+
} catch (Exception e) {
131+
e.printStackTrace();
132+
}
133+
}
124134
return authorUrl.replace("http://www.cnblogs.com/", "").replace("/", "");
125135
}
126136

0 commit comments

Comments
 (0)