ツイキャスの外部ツール配信画面のコメント機能を拡張する
コメント送信ボタンを追加する。
コメント送信とともにコメントに記入されたURLを別タブで開く機能を実装する。
実装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// ツイキャスプレミア配信の「外部ツール配信ページ」の時だけ稼働する var url = location.href; if (url == 'https://twitcasting.tv/psohyntuxtwinxv/broadcastertool?group_id=0000000&super=1' ) { alert('画面改造版です。'); // コメント送信とヨツベを同時実行するボタンを追加する。 $('.tw-comment-post-operations').append('<input type="button" id="me" value="ヨツベ" onclick="yotube();" />'); } // コメントに書かれたURLから広告無しヨツベURLを開いてコメントを送信する function yotube() { var comment = $('.tw-textarea').val(); openfunc(comment); $('.tw-button-primary').trigger("click"); } // 広告無しヨツベURLを開く function openfunc(url) { var parser = new URL(url); var exurl = 'https://www.youtube.com/embed/'+parser.searchParams.get("v"); window.open(exurl, 'mine'); } |
ScriptAutoRunner
他人のページにプログラムを割り込ませるchrome拡張
配信済みトラックを通知する
コメント送信とヨツベ呼び出し前にトラックがすでに配信済みであるかを判定する。
jquery.get()でトラックが配信済みかをTELENOIZEサーバに問い合わせる
1 2 3 4 5 6 |
$.get('hoge.php',{query1:"value", query2:"value"}).done(function( data ) { // ヨツベ呼び出しとコメント送信はこの戻り如何に依存するので // 該当メソッドはここに記載する }).fail( function() { // ..... }); |
残念!別ドメインを呼び出すことは許されないらしいorz
それでも諦めない!javascriptだけでなんとかする
最初の一手間、配信ページにテキストエリアを追加し配信前に配信済みトラックIDを書き込んでおく。
配信済み判定は当該テキストエリアを参照する。(プログラムで自動化)
配信する新しいトラックIDは当該テキストエリアに詰め込む。(プログラムで自動化)
広告回避ヨツベを別ウィンドーで開く。(プログラムで自動化)
最後の一手間、配信を終了したら当該テキストエリアの内容をコピペでファイルに保存する。
どんなもんだい。コレで完璧!
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 |
/** * ツイキャス配信ページ拡張JS */ // プレミアムツールズ配信画面で稼働する var url = location.href; if (url == 'https://twitcasting.tv/psohyntuxtwinxv/broadcastertool?group_id=00000&super=1' ) { alert('拡張JS'); // 拡張コメント送信ボタン追加 $('.tw-comment-post-operations').append('<input type="button" id="me" value="ヨツベ" onclick="yotube();" />'); // 配信済みトラックID記述エリア追加 $('.tw-tool-page-faq').append('<div><textarea name="vprm" rows="4" cols="40"></textarea></div>') } /** * 拡張ボタンクリックイベントのエントリポイント */ function yotube() { // コメントバリデーション var comment = $('.tw-textarea').val(); var parser = new URL(comment); var vprm = parser.searchParams.get("v"); if (vprm == "") { alert("リクエストNG"); return; } // 配信済み判定 var msg = idExists(vprm); if (msg != '') { if (!confirm(msg)) { $('.tw-textarea').val(''); return; } } // 広告回避ヨツベ呼び出し openfunc(comment); // ツイキャスコメント送信 $('.tw-button-primary').trigger("click"); } /** * 広告回避ヨツベ呼び出し * @param url */ function openfunc(url) { var parser = new URL(url); var exurl = 'https://www.youtube.com/embed/'+parser.searchParams.get("v"); window.open(exurl, 'mine'); } /** * 配信済み判定 * @param vprm ヨツベ vパラメータ * @returns */ function idExists(vprm) { var msg = ''; // 配信済みトラックIDをテキストエリアから取得 var yVPrm = {}; var destV = $('textarea[name="vprm"]').val(); // 連想配列に変換 var destVPrm = destV.split("\n"); $.each(destVPrm, function(index, value){ divide = value.split(','); yVPrm[divide[1]] = divide[0]; }); // サーチ $.each(yVPrm, function(index, value){ // console.log(index + ':' + vprm); if (index == vprm) { // 日付 var ux = value; var d = new Date(ux * 1000); var year = d.getFullYear(); var month = d.getMonth() + 1; var day = d.getDate(); msg = year+'年' + month + '月' + day + '日に配信実績があります。'; return false; } }); if (msg != '' ) { return msg; } // 見つからなければテキストエリアに追加 var dd = new Date(); var uxd = dd.getTime(); var csvuxd = Math.floor( uxd / 1000); var csv = "\n" + csvuxd + ',' + vprm; console.log(csv); $('textarea[name="vprm"]').val( $('textarea[name="vprm"]').val()+csv ); return ''; } |