ソースにそのまま書き込まないで、外部ファイル?にAPI KEYを書いておいて、そこを呼び出す?そのようなことはできるのでしょうか。
↓の質問の追加になります。
http://q.hatena.ne.jp/1493278858
ソースにそのまま書き込まないで、外部ファイル?にAPI KEYを書いておいて、そこを呼び出す?そのようなことはできるのでしょうか。
どちらかというと、この質問の続きですよね。
jQuery を使うなら、$.getJSON を使うことで、該当のページ以外のところから値を持ってくることができます。
例えば、以下のような JSON 形式のファイルを YouTube API を使う HTML と同じ階層の info.json というファイルに書いておきます。
{"apikey": "【APIキー】"}
で、API キーを使う側はこんな感じ。
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { var url = "info.json"; $.getJSON(url, function(info) { var apikey = info.apikey; // info.json に書いてある API KEY var video_id = "WTLQQPBPL1U"; var url = "https://www.googleapis.com/youtube/v3/videos?id=" + video_id + "&key=" + apikey + "&part=statistics"; $.getJSON(url, function(data) { // viewCount を取り出し var count = data.items[0].statistics.viewCount; // HTML に出力 $("#count").text(count); }); }); }); </script> <div id="count"></div>
外側の $.getJSON で、info.json を読み込んで、そこから API キーを取得します。
API キーを取得した後は、前の回答と同じ処理です。
いきなり見えちゃうという気持ち悪さは軽減できるのですが、ソースを見れば info.json に API キーが書いてあるのはまる分かりですし、仮に暗号化したとしても、ブラウザの開発用機能を使って www.googleapis.com へアクセスしている URL を調べれば、API キーはやっぱりばれてしまいます。
他の人に API キーを利用されないために、制限がかけられます。
HTTP リファラーを詐称する方法も無くはないのですが、もろに見えているよりはずいぶんマシだと思います。
動画がランダムで12個表示されてしまうので、これを1個だけ表示にしたいのですがウィジェットコードは動画12個と決まっているので、それを1個にする方法としてはifremeの表示サイズをうまく1個分サイズにするとか?
iframe で周りを見せなくするのでも良いのなら、CSS で見えなくするのでも良いかな、とか思いました。
こんな感じ。
<style> #trendtube-wrapper { display: none; /* 最初は見えなくしておく */ width: 320px; /* 幅を指定してみた */ } </style> <!-- TrendTube のブログパーツを表示する領域 --> <div id="trendtube-wrapper"> <!-- TrendTube のブログパーツ --> <script src="https://trendtube.wdeco.jp/api/type2/?thumb=block&query=鎧" charset="utf-8" ></script> </div> <script> window.onload = function() { // 12 個の動画を表示する領域 var boxes = document.querySelectorAll("#trendtube-wrapper .youtube-box"); // ランダムにひとつだけ表示するものを選ぶ var n_display = Math.floor(Math.random() * boxes.length); // それ以外は見えなくする Array.prototype.forEach.call(boxes, function(e, i) { if (i != n_display) { e.style.display = 'none'; } }); // 見えなくしておいた TrendTube のブログパーツを表示する領域を見えるようにする var wrapper = document.querySelector("#trendtube-wrapper"); wrapper.style.display = 'initial'; }; </script>
12個表示される動画のうち、乱数でひとつだけ表示するものを決めて、それ以外は CSS で非表示にしています。
「iframe で周りを見せなくするのでも良いのなら」と書いたのは、動画表示には直接に関係なさそうなリクエストをドカドカ投げるので、ちょっと重たいかなという気がするためです。
あと、先ほどのコードを試している際に気がついたのですが、12個の動画のうち、ひとつでも動画のタイトルにシングルクォートが入っていると、スクリプトエラーになってしまいます。
例えば、キーワードを "soccer" のように英語で指定するとか。
日本語なら大丈夫かというと、そうでもなくて "馬" とか "任天堂" とかだと結構な確率でエラーになりました。