//設定 var closeOnLinkClicked = true;//外部リンクをクリックした場合、ポップアップを閉じる var closeOnMouseExit = true;//ポップアップ上から離れた場合、ポップアップを閉じる var browseExt = false;//外部ブラウザで開く(falseだとJDICがあれば内部ブラウザで開く) var maxPopupWidth = 429;//ポップアップの最大横サイズ[px]、本来のhtmlサイズ調整用(0で調整なし、この場合、右に余分なスペース有) var addLinkNicoDic = false;//タグの後に、ニコニコ大百科のリンクを付加 ※ポップアップまでに時間がかかる場合があります(この場合、ステータスバーに「取得中...」が表示) var urlExec = true;// リンククリック時、URLExec.datの設定に従うかどうか var browserPath = false;//URLEcex.datの設定に従うときに使用する規定のブラウザのパス(「\」は「/」に置換してください) //実行 var vcx = v2c.context; var nvstream = ''; GetStatus(); function redirectURL(u) { if (u) { if(!(urlExec && openURLExec(u))) browseExt ? v2c.browseURLExt(u) : v2c.browseURL(u); if(!closeOnLinkClicked){ vcx.setPopupHTML(nvstream); if(closeOnMouseExit) vcx.setCloseOnMouseExit(true); if(maxPopupWidth) vcx.setMaxPopupWidth(maxPopupWidth); vcx.setRedirectURL(true); } } return; } function replaceStr(str,nl){ if(nl) { str = str.replace(/((?:mylist|user)\/\d+)/ig, '$1'); str = str.replace(/([sn]{1}m\d+)/ig, '$1'); } return str = str.replace(/&/ig,"&").replace(/'/ig,"'"); } function replaceNum(num){ return num = num.replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"); } function GetStatus(){ //選択文字列のチェック var ss = (v2c.getSelectedText() || vcx.link || vcx.res.message)+""; if(ss){ ss = ss.replace(/^\s+|\s+$/g, ""); } if(!ss||(ss.length==0)){ v2c.alert('テキスト取得失敗'); return; } //選択文字列からIDを抽出 //”sm”などを含む以降の数値をIDとする var rgex = new RegExp('(?:\\?|/|#|)((?:ax|c[adw]|c[dw]|f[xz]|ig|n[alm]|om|s[dkm]|y[ko]|z[a-e]|so|)\\d+)'); //var rgex = new RegExp('(?:(?:www|tw|es|de|m)\\.nicovideo.jp/watch|nico.ms)/(\\w{2}\\d+)'); var video_id = (ss.match(rgex) || [])[1]; if(!video_id){ v2c.alert('ID取得失敗'); return; } if(video_id.search(/^(lv|im)\d+/) > -1) return; if (vcx.getPopupOfID(video_id)) { vcx.closeOriginalPanel(); return; } var url = 'http://e...content-available-to-author-only...o.jp/api/getthumbinfo/' + video_id; v2c.setStatus('動画情報、取得中...'); var source = v2c.readURL(url); v2c.setStatus(''); if (!source) { v2c.alert('ページを取得できませんでした。'); return; } else if (source.indexOf('nicovideo_thumb_response status="fail"') > -1){ if(source.indexOf('DELETED') > -1) { v2c.alert('この動画は削除されました。'); } else { v2c.alert('動画を取得できませんでした。'); } return; } //ステータスの変数宣言 var title = " - "; var description = " - "; var all_description = " - "; var thumbnail_url = " - "; var first_retrieve = " - "; var length = " - "; var movie_type = " - "; var size_high = " - "; var kB_size_high = " - "; var MB_size_high = " - "; var size_low = " - "; var kB_size_low= " - "; var MB_size_low= " - "; var view_counter = " - "; var comment_num = " - "; var mulist_counter = " - "; var last_res_body = " - "; var watch_url = " - "; var thumb_type = " - "; var embeddable = "ー"; var live_play = "ー"; var jp_category_tag = ""; var jp_lock_tag = ""; var jp_free_tag = ""; var jp_tag = ""; var tw_tag = ""; var de_tag = ""; var es_tag = ""; var user_id = ""; //タイトル取得 if(source.match(/title>(.+?)<\/title>/i)){ title = replaceStr(RegExp.$1); } //説明取得 if(source.match(/description>(.+?)<\/description>/i)){ description = replaceStr(RegExp.$1); all_description = replaceStr(description,true); if (description.length > 100) description = description.substring(0, 100)+'..'; } //サムネイルのURL取得 if(source.match(/thumbnail_url>(.+?)<\/thumbnail_url>/i)){ thumbnail_url = RegExp.$1; } //投稿時間取得 if(source.match(/first_retrieve>(.+?)<\/first_retrieve>/i)){ var d= (RegExp.$1).match(/\d{2}/g); first_retrieve = d[1]+'/'+d[2]+'/'+d[3]+' '+d[4]+':'+d[5]; } //再生時間取得 if(source.match(/length>(.+?)<\/length>/i)){ length = RegExp.$1; } //形式取得 if(source.match(/movie_type>(.+?)<\/movie_type>/i)){ movie_type = RegExp.$1; } //サイズ(高画質)取得 if(source.match(/size_high>(.+?)<\/size_high>/i)){ size_high = RegExp.$1; kB_size_high = (parseInt(size_high)/1024).toFixed(1); MB_size_high = (parseInt(kB_size_high)/1024).toFixed(2); } //サイズ(低画質)取得 if(source.match(/size_low>(.+?)<\/size_low>/i)){ size_low = RegExp.$1; kB_size_low = (parseInt(size_low)/1024).toFixed(1); MB_size_low = (parseInt(kB_size_low)/1024).toFixed(2); } //再生数取得 if(source.match(/view_counter>(.+?)<\/view_counter>/i)){ view_counter = replaceNum(RegExp.$1); } //コメント数取得 if(source.match(/comment_num>(.+?)<\/comment_num>/i)){ comment_num = replaceNum(RegExp.$1); } //マイリスト数取得 if(source.match(/mylist_counter>(.+?)<\/mylist_counter>/i)){ mylist_counter = replaceNum(RegExp.$1); } //最近のコメント取得 if(source.match(/last_res_body>(.+?)<\/last_res_body>/i)){ last_res_body = replaceStr(RegExp.$1); } //動画のURL取得 if(source.match(/watch_url>(.+?)<\/watch_url>/i)){ watch_url = RegExp.$1; } //通常かマイメモリか取得 if(source.match(/thumb_type>(.+?)<\/thumb_type>/i)){ thumb_type = RegExp.$1; } //外部からの埋め込み再生可否取得 if(source.match(/embeddable>(.+?)<\/embeddable>/i)){ embeddable = RegExp.$1 == "1" ? "○" : "×"; } //生放送の引用可否取得 if(source.match(/live_play>(.+?)<\/no_live_play>/i)){ live_play = RegExp.$1 == "1" ? "×" : "○"; } //日本タグ取得 rgex = new RegExp('([^><]+)','ig'); rgex.lastIndex = source.indexOf('')+1; var readDicApi = function( kw ) { v2c.setStatus('タグの大百科有無、取得中...'); var dic = kw ? v2c.readURL('http://a...content-available-to-author-only...c.jp/e/n/' + kw) + '' : ''; v2c.setStatus(''); if(dic && dic.indexOf('1') > 0) { return ' ' + '' + ' '; // + '">大百科' + ' '; //↑行と置換でアイコン表示、ただポップサイズが崩れる } else { return ' ' + '' + ' '; // + '">大百科' + ' '; //↑行と置換でアイコン表示、ただポップサイズが崩れる } } var keyword = ''; while(rgex.exec(source) != null){ if(RegExp.lastMatch.indexOf('category') > -1) { keyword = encodeURIComponent(RegExp.lastParen); jp_category_tag += '' + RegExp.lastParen + ''; jp_category_tag += addLinkNicoDic ? readDicApi( keyword ) : ' '; } else if(RegExp.lastMatch.indexOf('lock') > -1) { keyword = encodeURIComponent(RegExp.lastParen); jp_lock_tag += '' + RegExp.lastParen + ''; jp_lock_tag += addLinkNicoDic ? readDicApi( keyword ) : ' '; } else { keyword = encodeURIComponent(RegExp.lastParen); jp_free_tag += '' + RegExp.lastParen + ''; jp_free_tag += addLinkNicoDic ? readDicApi( keyword ) : ' '; } if(RegExp.rightContext.search(/^<\/tag>\n<\/tags>/i) == 0) break; } if(jp_category_tag == "") jp_category_tag = replaceStr(jp_category_tag); if(jp_lock_tag == "") jp_lock_tag = replaceStr(jp_lock_tag); if(jp_free_tag == "") jp_free_tag = replaceStr(jp_free_tag); jp_tag = jp_category_tag + jp_lock_tag + jp_free_tag; //台湾タグ取得 rgex = new RegExp('([^><]+)','ig'); rgex.lastIndex = source.indexOf('')+1; while(rgex.exec(source) != null){ tw_tag += '' + RegExp.lastParen + ''; if(RegExp.rightContext.search(/^<\/tag>\n<\/tags>/i) == 0) break; tw_tag += " "; } //ドイツタグ取得 rgex = new RegExp('([^><]+)','ig'); rgex.lastIndex = source.indexOf('')+1; while(rgex.exec(source) != null){ de_tag += '' + RegExp.lastParen + ''; if(RegExp.rightContext.search(/^<\/tag>\n<\/tags>/i) == 0) break; de_tag += " "; } de_tag = replaceStr(de_tag); //スペインタグ取得 rgex = new RegExp('([^><]+)','ig'); rgex.lastIndex = source.indexOf('')+1; while(rgex.exec(source) != null){ es_tag += '' + RegExp.lastParen + ''; if(RegExp.rightContext.search(/^<\/tag>\n<\/tags>/i) == 0) break; es_tag += " "; } es_tag = replaceStr(es_tag); //ユーザーID取得 if(source.match(/user_id>(.+?)<\/user_id>/i)){ user_id = RegExp.$1; } //htmlテンプレートの読み込み var fs = java.io.File.separator; nvstream = v2c.readFile(v2c.saveDir +fs+fs+'script'+fs+fs+'PopupStatusNicovideo'+fs+fs+'template.txt'); //パラメータの置換 nvstream = nvstream.replaceAll("%video_id%",video_id); nvstream = nvstream.replaceAll("%title%",title); nvstream = nvstream.replaceAll("%description%",description); nvstream = nvstream.replaceAll("%all_description%",all_description); nvstream = nvstream.replaceAll("%thumbnail_url%",thumbnail_url); nvstream = nvstream.replaceAll("%first_retrieve%",first_retrieve); nvstream = nvstream.replaceAll("%length%",length); nvstream = nvstream.replaceAll("%movie_type%",movie_type); nvstream = nvstream.replaceAll("%size_high%",size_high); nvstream = nvstream.replaceAll("%kB_size_high%",kB_size_high); nvstream = nvstream.replaceAll("%MB_size_high%",MB_size_high); nvstream = nvstream.replaceAll("%size_low%",size_low); nvstream = nvstream.replaceAll("%kB_size_low%",kB_size_low); nvstream = nvstream.replaceAll("%MB_size_low%",MB_size_low); nvstream = nvstream.replaceAll("%view_counter%",view_counter); nvstream = nvstream.replaceAll("%comment_num%",comment_num); nvstream = nvstream.replaceAll("%mylist_counter%",mylist_counter); nvstream = nvstream.replaceAll("%movie_type%",movie_type); nvstream = nvstream.replaceAll("%last_res_body%",last_res_body); nvstream = nvstream.replaceAll("%watch_url%",watch_url); nvstream = nvstream.replaceAll("%thumb_type%",thumb_type); nvstream = nvstream.replaceAll("%embeddable%",embeddable); nvstream = nvstream.replaceAll("%live_play%",live_play); nvstream = nvstream.replaceAll("%jp_category_tag%",jp_category_tag); nvstream = nvstream.replaceAll("%jp_lock_tag%",jp_lock_tag); nvstream = nvstream.replaceAll("%jp_free_tag%",jp_free_tag); nvstream = nvstream.replaceAll("%jp_tag%",jp_tag); nvstream = nvstream.replaceAll("%tw_tag%",tw_tag); nvstream = nvstream.replaceAll("%de_tag%",de_tag); nvstream = nvstream.replaceAll("%es_tag%",es_tag); nvstream = nvstream.replaceAll("%user_id%",user_id); //ポップアップ表示 vcx.setPopupHTML(nvstream); if(closeOnMouseExit) vcx.setCloseOnMouseExit(true); if(maxPopupWidth) vcx.setMaxPopupWidth(maxPopupWidth); vcx.setRedirectURL(true); vcx.setPopupID(video_id); return; } function openURLExec( url ) { var url = new java.lang.String( url ); var fs = java.io.File.separator; var tmp = v2c.readFile( v2c.saveDir + fs + 'URLExec.dat', 'Shift-JIS' ); if ( !tmp ) { v2c.println( 'URLExec.datが見つかりませんでした' ); return false; } var lines = tmp.split( '\r\n' ); var ptn = java.util.regex.Pattern.compile("^(?