admin
2020-05-19 744594ef1a2f530fc3e86ea9dc48b62247f79420
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package com.yeshi.fanli.controller.h5;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
 
import javax.annotation.Resource;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
 
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.yeshi.utils.JsonUtil;
 
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.xcx.StrategyPicture;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.user.StrategyPictureService;
import com.yeshi.fanli.util.StringUtil;
 
/**
 * 动态
 * 
 * @author Administrator
 *
 */
@Controller
@RequestMapping("api/h5/v1/gonglue")
public class GongLueController {
 
    @Resource
    private StrategyPictureService strategtPictureService;
 
    @Resource
    private ConfigService configService;
 
    /**
     * 获取攻略列表
     * 
     * @param acceptData
     * @param callBack
     * @param type
     * @param out
     */
    @RequestMapping(value = "listGongLue")
    public void listGongLue(AcceptData acceptData, String callback, int type, PrintWriter out) {
        List<StrategyPicture> list = null;
        if (type == StrategyPicture.TYPE_TEXT)
            list = strategtPictureService.getTextStrategyPictureListCache();
        else
            list = strategtPictureService.getVideoStrategyPictureListCache();
 
        Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
        if (StringUtil.isNullOrEmpty(callback)) {
            List<StrategyPicture> newList = new ArrayList<StrategyPicture>();
            newList.addAll(list);
            if (acceptData != null && "ios".equalsIgnoreCase(acceptData.getPlatform())
                    && !StringUtil.isNullOrEmpty(acceptData.getVersion())
                    && configService.iosOnLining(Integer.parseInt(acceptData.getVersion())))
                for (int i = 0; i < newList.size(); i++) {
                    if (newList.get(i).getTitle().contains("赚钱")) {
                        newList.remove(i);
                        i--;
                    }
                }
            out.print(JsonUtil.loadTrueResult(gson.toJson(newList)));
        } else
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(gson.toJson(list))));
    }
 
    @RequestMapping(value = "getPlayUrl")
    public void getPlayUrl(AcceptData acceptData, String callBack, long id, PrintWriter out) {
 
    }
 
    /**
     * 解析bilibili的播放链接
     * 
     * @param url
     * @return
     */
    public static String parseBiliBiliPlayUrl(String url) {
        try {
            Document doc = Jsoup.connect(url).header("Host", "m.bilibili.com")
                    .header("User-Agent",
                            "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1")
                    .get();
            Elements els = doc.getElementsByTag("script");
            for (int i = 0; i < els.size(); i++) {
                String html = els.get(i).html();
                if (html.contains("window.__INITIAL_STATE__=")) {
                    html = html.replace("window.", "windowData.");
                    html = "var windowData={};" + html;
                    String dataJS = html + "\n"
                            + " function getData(){return windowData.__INITIAL_STATE__.reduxAsyncConnect.videoInfo.initUrl;}";
                    ScriptEngineManager manager = new ScriptEngineManager();
                    ScriptEngine engine = manager.getEngineByName("javascript");
                    try {
                        engine.eval(dataJS);
                        if (engine instanceof Invocable) {
                            Invocable in = (Invocable) engine;
                            String playUrl = in.invokeFunction("getData").toString();
                            if (!playUrl.startsWith("http"))
                                playUrl = "http:" + playUrl;
                            return playUrl;
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
 
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        return null;
    }
 
}