拡張機能を使用してChromeブラウザーを使用してVKから音楽とビデオを取り戻す方法について

こんにちは、ハブロフチャン。 今日は、自分のペンを使ってVKからパソコンに音楽やビデオをダウンロードできるようにするためのJavascriptコードを共有したいと思います。 かっこいいクリップと音楽をどのように録音したか想像するのは難しくありませんが、そこにアップロードしましたが、あなたのコンピューターではこの良いものはどこかに消えてしまいました...それは関係ありません! 正当に帰属するものを収縮させます。 主なものは、これが私たちにとって私たちのブラウザであるということです。しかし、サイトは許可されています。



まず、オーディオファイルを解析する必要があります...それでは、「area clear_fix」クラスを取得し、「play_new」クラスに属する配列にプッシュしてみましょう。 まず、配列をスタイルに割り当てて、ページ上の要素の位置を取得します(その後、ボタンを並べて表示します)。 次に、入力からリンクを取得し、bタグから将来のファイルの名前を取得します。 次に、ダウンロード属性を作成する新しいリンクを割り当てる必要があります。



function audio(){ var main_div=document.getElementsByClassName("area clear_fix"); for(var i=0;i<main_div.length;i++){ if(main_div[i].parentNode.firstChild.href){ main_div[i].parentNode.firstChild.style.top=main_div[i].getElementsByClassName('play_new')[0].offsetTop+"px"; continue; } var _mp3_=main_div[i].getElementsByTagName("input")[0].value.split(",")[0]; var _b_=main_div[i].getElementsByTagName("b")[0]; var _top_=document.getElementById(main_div[0].parentNode.id.replace('audio','play')).offsetTop+"px"; var _t_=main_div[i].getElementsByClassName('play_new')[0].offsetTop+"px"; var span=main_div[i].getElementsByTagName('span')[0]; var ispan=span.innerHTML; if(span.children[0]){ var ispan=span.children[0].innerHTML; } var _a_=document.createElement("a"); //_a_.href=""+_mp3_+"&name="+_b_.children[0].innerHTML+"-"+ispan; _a_.href = _mp3_.substring(0, _mp3_.indexOf('.mp3') + 4); _a_.download=trim(_b_.children[0].innerHTML+"-"+ispan)+".mp3"; _a_.title=' '+_b_.children[0].innerHTML+"-"+ispan; _a_.draggable="true"; _a_.innerHTML='<span style="cursor:copy;padding:6px;width:16px;height:16px;background-color:#5F7D9D;color:#fff;border-radius:2px;"><img src="http://st0.vk.me/images/icons/darr.gif" /></span>'; _a_.style.zIndex="10"; _a_.style.left="30px"; _a_.style.top=_t_; _a_.style.position="absolute"; main_div[i].parentNode.insertBefore(_a_,main_div[i].parentNode.firstChild); _b_.style.paddingLeft="27px"; } }
      
      







ここで、それは明らかなはずです、それはすべてです...まあ、ファイル拡張子の後のゴミをカットするために、私たちは適用しました:

_a_.href = _mp3_.substring(0、_mp3_.indexOf( '。mp3')+ 4);



一般に、同じサイトにいる場合はもちろん、この方法で間隔を空けて実行することはすでに可能です。

 setInterval(function(){ if(window.location.href.indexOf('vk.com')>1) { if(document.getElementsByClassName("area clear_fix").length!=0){ audio(); } } },1000);
      
      







いいね 1つの機能が用意されています。 ビデオファイルをダウンロードする方法について説明します...





繰り返しますが、「video_box_wrap」クラスを取得し、この要素にdownloadvideoのid属性が含まれていない場合、YouTubeがスリップできるIFRAMEがない場合は、それを整理します。

 function videovk(){ if(document.getElementsByClassName("video_box_wrap")[0] && !document.getElementById('downloadvideo') && document.getElementById('video_player').tagName!='IFRAME'){ var invideo=""; var obj = new Object(); var name=new Array(); var content=new Array(); var fl=encodeURI(unescape(document.getElementsByClassName("video_box_wrap")[0].innerHTML.split(" ")[8].split('"')[1].replace(/amp;/g,""))); var flvars=fl.split("&"); for(var c=0;c<=flvars.length-1;c++){ name[c]=flvars[c].split("=")[0]; content[c]=flvars[c].split("=")[1]; } for(var c2=0;c2<=name.length;c2++){ obj[name[c2]]=content[c2]; } var countvid=0; if(obj.url240){ countvid+=1; var invideo=invideo+vv(obj.url240,'240',countvid,obj.md_title); } if(obj.url360){ countvid+=1; var invideo=invideo+vv(obj.url360,'360',countvid,obj.md_title); } if(obj.url480){ countvid+=1; var invideo=invideo+vv(obj.url480,'480',countvid,obj.md_title); } if(obj.url720){ countvid+=1; var invideo=invideo+vv(obj.url720,'720',countvid,obj.md_title); } if(obj.cache240){ countvid+=1; invideo=invideo+vv(obj.cache240,'240',countvid,obj.md_title); } if(obj.cache360){ countvid+=1; invideo=invideo+vv(obj.cache360,'360',countvid,obj.md_title); } if(obj.cache480){ countvid+=1; invideo=invideo+vv(obj.cache480,'480',countvid,obj.md_title); } if(obj.cache720){ countvid+=1; invideo=invideo+vv(obj.cache720,'720',countvid,obj.md_title); } var videodownloader=document.createElement("div"); videodownloader.style.height="auto";videodownloader.style.width="auto"; videodownloader.id="downloadvideo";videodownloader.style.paddingBottom="5px"; videodownloader.innerHTML=invideo; document.getElementById("mv_narrow").insertBefore(videodownloader, document.getElementById("mv_narrow").firstChild); } }
      
      







...コードから、さまざまな形式のビデオオプションへのリンクを形成し、mv_narrow識別子にすぐにダウンロード属性を持つid = "downloadvideo"の自己生成リンクを追加することが明らかです。



そして、ページにリンクを作成するvv関数が必要です。 ロシア語の文字を認識するには、utf8_decode関数が必要です。エッジに沿ってスペースをトリミングするには、trim関数が必要です。



 function utf8_decode(utftext) { var string = ""; var i = 0; var c = c1 = c2 = 0; while ( i < utftext.length ) { c = utftext.charCodeAt(i); if (c < 128) { string += String.fromCharCode(c); i++; } else if((c > 191) && (c < 224)) { c2 = utftext.charCodeAt(i+1); string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); i += 2; } else { c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2); string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); i += 3; } } return string; } function trim(str) { return str.replace(/^[\s]+/,"").replace(/[\s]+$/,""); } function vv(a,b,c,d){ if(c%2!=0){ var p1="<p>"; var p2=""; } if(c%2==0 ){ var p1=""; var p2="</p>"; } return p1+"<a style='color:white;background-color:#2F5879;padding:5px 5px 2px 5px; border:#395A7C;' " + " draggable='true' title=': "+utf8_decode(trim(decodeURIComponent(d)))+"' download='"+utf8_decode(trim(decodeURIComponent(d)))+"."+a.substr(-3)+"' href='"+a+"'>"+b+" ("+a.substr(-3)+")</a> "+p2; }
      
      





コードの主要部分は準備ができており、間隔を修正するために残ります。



 setInterval(function(){ if(window.location.href.indexOf('vk.com')>1) { if(document.getElementById('video_player') && document.getElementById("mv_narrow")){ videovk(); } if(document.getElementsByClassName("area clear_fix").length!=0){ audio(); } } },1000);
      
      







それだけです コードの準備ができて、マニフェストが必要になったら、次のとおりです。

 { "manifest_version":2, "name":"Downloader", "version":"1.0", "description":"Downloader of mp3 files from vk.com and mail.ru.", "permissions": [ "http://vk.com/*", "tabs" ], "content_scripts": [ { "js": [ "main.js" ], "matches": [ "http://vk.com/*", "http://*.vk.com/*", "https://vk.com/*", "https://*.vk.com/*" ], "run_at": "document_end" } ], "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", "browser_action": { "default_title":"Downloader Extension" } }
      
      





content_scriptsでは、関数を含むコードがmain.jsファイルに保存され、ページが読み込まれた後に読み込まれること、つまり「run_at」:「document_end」が書き込まれます。



All Articles