自己开发的app有个段子模块,是从第三方导入的,用过聚合、点睛、showapi、阿里数据等,后来都有了调用次数限制,最初还开了一年聚合的会员,但是对于非盈利个人开发者,收费还是有点稍高。于是就折腾着将第三方的笑话数据导出来,自己搭了个后台,基于简单方便且免费,选择了bmob。
于是开始导出数据,选用的是最熟悉的java,将多个平台的数据导出。聚合、showapi都是免费的,每天导出的数据量有限,阿里充值了钱,基本可以导出数据平台的所有笑话和趣图。以下是导出数据的代码:
private static String doGetJuhe(int pageNum, String key) {
String url = "http://v.juhe.cn/joke/content/text.php";
url += "?page="+pageNum+"&pagesize=20&key="+key;
String result = sendGetRequest(url);
return result;
}
private static String doGetHaoService(int pageNum,String key) {
String url = "http://apis.haoservice.com/lifeservice/Joke/ContentList";
url += "?key="+key+"&pagesize=10&page=+"+pageNum+"&paybyvas=false";
String result = sendGetRequest(url);
return result;
}
public static String doGetAli(int pageNum, String path, String appCode) {
String host = "https://ali-joke.showapi.com";
String method = "GET";
String appcode = appCode;
Map<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", "APPCODE " + appcode);
Map<String, String> querys = new HashMap<String, String>();
querys.put("maxResult", "50");
querys.put("page", "" + pageNum);
querys.put("time", "2018-07-19");
try {
HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys);
return EntityUtils.toString(response.getEntity());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
于是,开始折腾bmob,搭建应用审核后,建一个笑话数据库:主要字段包括 _id(自增id)、title(标题)、content(内容)、createTime(发布时间)、images(图片列表)、author(作者,与user表关联)、type(类型,笑话/趣图/文章...),其他字段(如feeds,likes,favs,addr,addrName,extra拓展字段等)
然后,需要将之前导出的数据导入到bmob数据库中,bmob支持csv及json文件导入,按照模板格式即可,java代码如下:
private static JSONArray jsonToHaoService(JSONArray resultJa, String str) {
try {
JSONObject jsonO = new JSONObject(str);
JSONArray jsonA = jsonO.optJSONArray("result");
for(int i = 0; i < jsonA.length(); i++) {
JSONObject jo = jsonA.optJSONObject(i);
if(!jo.has("content") || jo.optString("content").length() < 10) {
continue;
}
JSONObject resultJo = new JSONObject();
resultJo.put("type", "1");
resultJo.put("title", jo.optString("title"));
resultJo.put("content", jo.optString("content").replaceAll("‍", "").replaceAll("‍", "").replaceAll("…", ""));
resultJo.put("time", jo.optString("updatetime") + ":00");
if(resultJa == null) {
resultJa = new JSONArray();
}
resultJa.put(resultJo);
}
} catch (Exception e) {
e.printStackTrace();
}
if(resultJa == null) {
return null;
}
return resultJa;
}
private static JSONArray jsonToJuhe(JSONArray resultJa, String str) {
try {
JSONObject jsonO = new JSONObject(str);
JSONObject jsonO2 = jsonO.optJSONObject("result");
JSONArray jsonA = jsonO2.optJSONArray("data");
for(int i = 0; i < jsonA.length(); i++) {
JSONObject jo = jsonA.optJSONObject(i);
if(!jo.has("content") || jo.optString("content").length() < 10) {
continue;
}
JSONObject resultJo = new JSONObject();
resultJo.put("type", "1");
resultJo.put("title", "");
resultJo.put("content", jo.optString("content"));
resultJo.put("time", jo.optString("updatetime"));
if(resultJa == null) {
resultJa = new JSONArray();
}
resultJa.put(resultJo);
}
} catch (Exception e) {
e.printStackTrace();
}
if(resultJa == null) {
return null;
}
return resultJa;
}
private static JSONArray jsonToAliImage(JSONArray resultJa, String str) {
try {
JSONObject jsonO = new JSONObject(str);
JSONObject jsonO2 = jsonO.optJSONObject("showapi_res_body");
JSONArray jsonA = jsonO2.optJSONArray("contentlist");
for(int i = 0; i < jsonA.length(); i++) {
JSONObject jo = jsonA.optJSONObject(i);
if(!jo.has("img") || jo.optString("img").length() < 10) {
continue;
}
JSONObject resultJo = new JSONObject();
resultJo.put("type", "2");
resultJo.put("title", jo.optString("title"));
resultJo.put("img", jo.optString("img"));
resultJo.put("time", jo.optString("ct").substring(0, 19));
if(resultJa == null) {
resultJa = new JSONArray();
}
resultJa.put(resultJo);
}
} catch (Exception e) {
System.out.println(str);
e.printStackTrace();
}
if(resultJa == null) {
return null;
}
return resultJa;
}
private static JSONArray jsonToAli(JSONArray resultJa, String str) {
try {
JSONObject jsonO = new JSONObject(str);
JSONObject jsonO2 = jsonO.optJSONObject("showapi_res_body");
JSONArray jsonA = jsonO2.optJSONArray("contentlist");
for(int i = 0; i < jsonA.length(); i++) {
JSONObject jo = jsonA.optJSONObject(i);
if(!jo.has("text") || jo.optString("text").length() < 10) {
continue;
}
JSONObject resultJo = new JSONObject();
resultJo.put("type", "1");
resultJo.put("title", jo.optString("title"));
resultJo.put("content", jo.optString("text"));
resultJo.put("time", jo.optString("ct").substring(0, 19));
if(resultJa == null) {
resultJa = new JSONArray();
}
resultJa.put(resultJo);
}
} catch (Exception e) {
System.out.println(str);
e.printStackTrace();
}
if(resultJa == null) {
return null;
}
return resultJa;
}
原文:简书ThinkinLiu 博客: IT老五
ps:这里主要是记录下来自己以后可能用到,可能写得不是太明白,没去整理了
评论