我正在尝试重复从Google云端硬盘获取可下载链接的过程,就像在Internet下载管理器(
Windows)中使用的那样.
我正在做以下事情:
>下载链接的HTML源代码.
>使用正则表达式搜索fmt_stream_map.
>解码.
>尝试联系该链接.
>访问被拒绝.
在Internet下载管理器中使用相同的方法,并且它运行良好.我正在使用我的手机获取链接,并通过手机访问它.所以基本上它是相同的IP和相同的设备.
我的代码首先下载源代码.搜索地图列表,然后将质量及其描述存储在数组中.之后,我搜索链接的fmt_stream_map,并将它们添加到最终模型中,以便轻松访问它们.
我有3个类,其中两个是模型,最后一个是此过程的主类.
- public class ItemStreamList {
- private String quality;
- private String description;
- public ItemStreamList(){
- }
- public ItemStreamList(String quality,String description){
- this.quality = quality;
- this.description = description;
- }
- public String getQuality() {
- return quality;
- }
- public void setQuality(String quality) {
- this.quality = quality;
- }
- public String getDescription() {
- return description;
- }
- public void setDescription(String description) {
- this.description = description;
- }
- }
- public class ItemLink {
- private String quality;
- private String qualityDesc;
- private String link;
- public ItemLink(){
- }
- public ItemLink(String quality,String qualityDesc,String link){
- this.quality = quality;
- this.qualityDesc = qualityDesc;
- this.link = link;
- }
- public String getQualityDesc() {
- return qualityDesc;
- }
- public void setQualityDesc(String qualityDesc) {
- this.qualityDesc = qualityDesc;
- }
- public String getLink() {
- return link;
- }
- public void setLink(String link) {
- this.link = link;
- }
- public String getQuality() {
- return quality;
- }
- public void setQuality(String quality) {
- this.quality = quality;
- }
- }
现在我们来到主班.这是一个“有点”记录.
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- getPageHTML("https://drive.google.com/file/d/0B7--EhvK76QDNmduLWFZMXh1dGs/view");
- }
- private void getPageHTML(final String mURL){
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- Document mDoc = Jsoup.connect(mURL).get();
- String mHTML = mDoc.toString();
- boolean hasSetStreamMapList = setStreamMapList(mHTML);
- String mStreamMap = getMatchRegex(mHTML,"\"fmt_stream_map\",\"","\"]");
- mStreamMap = org.apache.commons.text.StringEscapeUtils.unescapeJava(mStreamMap);
- String[] mStreamMapQualities = mStreamMap.split(",");
- if(hasSetStreamMapList){
- List<ItemLink> mLinks = new ArrayList<>();
- for (int i = 0; i < mStreamMapQualities.length; i++){
- String[] mLinksArray = mStreamMapQualities[i].split("\\|");
- String mLink = mLinksArray[1];
- mLink = mLink.replaceAll("%2",",");
- mLinks.add(new ItemLink(mLinksArray[0],getQualityDescription(mLinksArray[0]),mLink));
- }
- for (int i = 0; i < mLinks.size(); i++){
- Log.i("StreamMap","Quality: " + mLinks.get(i).getQuality() + " - " + mLinks.get(i).getQualityDesc() + "\n" + "Link: " + mLinks.get(i).getLink());
- Log.i("StreamMap","---------------------------");
- }
- startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(mLinks.get(0).getLink())));
- } else {
- Log.i("StreamMap","Stream Map is NOT set");
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }).start();
- }
- private List<ItemStreamList> mStreamListItems;
- private String getQualityDescription(String mQuality){
- // Loop through the Stream Map's Array
- for (int i = 0; i < mStreamListItems.size(); i++){
- // If the Quality contains the Param,then return it
- if(mStreamListItems.get(i).getQuality().contains(mQuality))
- return mStreamListItems.get(i).getDescription();
- }
- // Didn't find the quality,return null
- return null;
- }
- private boolean setStreamMapList(String mSource){
- // Define the Array
- mStreamListItems = new ArrayList<>();
- // Get the fmt_list from the HTML
- String mStreamMapList = getMatchRegex(mSource,"\"fmt_list\","\"]");
- // Check if isn't null
- if(mStreamMapList != null){
- // Split the qualities by ","
- String[] mStreamMapListArray = mStreamMapList.split(",");
- // Loop through the Array
- for (int i = 0; i < mStreamMapListArray.length; i++){
- /*
- Split the array by "/"
- First index has the quality
- Second index has the quality's description
- */
- String[] mModelArray = mStreamMapListArray[i].split("/");
- mStreamListItems.add(new ItemStreamList(mModelArray[0],mModelArray[1]));
- }
- return true;
- }
- // It's null or not set,return false
- return false;
- }
- private String getMatchRegex(String mSource,String mFirst,String mSecond){
- String regexString = Pattern.quote(mFirst) + "(.*?)" + Pattern.quote(mSecond);
- Pattern mPattern = Pattern.compile(regexString);
- Matcher mMatcher = mPattern.matcher(mSource);
- while(mMatcher.find())
- {
- String resultString = mMatcher.group(1);
- return resultString;
- }
- return null;
- }