huanghongfa
2021-07-24 34e50f2c23ff7cc7f0dbf2a40e3d038b30aec12f
springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/WxOfficialApi.java
@@ -2,13 +2,17 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.panzhihua.common.constants.UserConstants;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.utlis.HttpClientUtil;
import com.panzhihua.common.utlis.StringUtils;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
@@ -16,11 +20,15 @@
import java.net.URL;
import java.nio.charset.Charset;
import java.util.*;
import java.util.concurrent.TimeUnit;
@Slf4j
@RestController
@RequestMapping("/official")
public class WxOfficialApi {
    @Resource
    private StringRedisTemplate stringRedisTemplate;
    //公众号appid
    private List<String> appidList = new ArrayList<String>(){{this.add("wx7c733ebbf6c55ecf");this.add("wxc94f0cddf13577d5");}};
@@ -112,7 +120,7 @@
     * @param url 文章链接
     * @return 文章内容
     */
    public static R getActicle(String url) {
    public static String getActicle(String url) {
        // post发送的参数
        Map<String, Object> map = new HashMap<>();
        map.put("type", "news"); // news表示图文类型的素材,具体看API文档
@@ -120,10 +128,7 @@
        map.put("count", 5);
        // 将map转换成json字符串
        String paramBody = JSON.toJSONString(map);
        // 请求与响应
        String resp = HttpClientUtil.get(url, getWxHeaderMap(),paramBody);
        log.info(resp);
        return R.ok(resp);
        return  HttpClientUtil.get(url, getWxHeaderMap(),paramBody);
    }
    @ApiOperation(value = "拉取公众号列表")
@@ -148,18 +153,50 @@
            tokenList.forEach(token -> {
                try {
                    String url = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=" + token;
                    R result = getActicle(url);
//                  String result = officialApi.getContentList(token);
                    String result = getActicle(url);
                    log.info("通过token获取文章列表成功,返回结果:" + result);
//                    resultList.add(JSON.parseObject(result));
                    JSONObject resultJson = JSON.parseObject(result);
                    if(resultJson != null){
                        List<JSONObject> itemList = JSON.parseArray(resultJson.getString("item"),JSONObject.class);
                        if(!itemList.isEmpty()){
                            for (JSONObject object : itemList) {
                                String newsId = object.getString("media_id");
                                JSONObject contentJson = JSON.parseObject(object.getString("content"));
                                List<JSONObject> newsItemList = JSON.parseArray(contentJson.getString("news_item"),JSONObject.class);
                                String newsUrl = newsItemList.get(0).getString("url");
                                newsItemList.get(0).put("news_id",newsId);
                                contentJson.put("news_item",newsItemList);
                                object.put("content",contentJson);
                                ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();
                                valueOperations.set(UserConstants.NEWS_ID + newsId, newsUrl + "", 2, TimeUnit.DAYS);
                            }
                        }
                        resultJson.put("item",itemList);
                    }
                    resultList.add(resultJson);
                }catch (Exception e){
                    log.error("通过token获取文章列表失败,错误原因:" + e.getMessage());
                }
            });
        }
        return R.ok(resultList);
    }
    @ApiOperation(value = "获取公众号文章链接")
    @GetMapping(value = "/get/noToken")
    public R getDiscuss(@RequestParam("mediaId") String mediaId){
        String key = UserConstants.NEWS_ID + mediaId;
        Boolean hasKey = stringRedisTemplate.hasKey(key);
        if (!hasKey) {
            return R.fail("未找到该文章的链接地址");
        }
        ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();
        String url = valueOperations.get(key);
        return R.ok(url);
    }
}