質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.63%

YouTubeの登録者かどうかWEBサイトで判断したい

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 1,226

yooashleaf

score 29

YouTubeの登録者かどうかWEBサイトで判断したい

私のチャンネルの登録者だけを対象に、
私が所有するWEBサイトでサービスを行いたいのですが、どのような方法がありますでしょうか?

登録者はYouTubeにログインした状態で、当WEBサイトにアクセスさせる事を前提とします。

【試したこと】
(1)YouTubeのチャンネル登録ボタンを当WEBサイトに設置する。
登録者には解除ボタン、未登録者には登録ボタンが表示されるので、cssやjsの変数を解析する

YouTubeのチャンネル登録ボタンはjsですが、結局iframeで描画しているので取得できない

(2)PHPやperlで、(1)のiframeのscrをスクレイピングしてhtmlをとってくる

スクレイピングするのはあくまで設置サーバなので、閲覧者の状態には関係なく、
すべて未登録者の扱いとなってしまう。

(3)jsで、(1)のiframeのscrをスクレイピングしてhtmlをとってくる(jquery.xdomainajax.js)

phpやperlとは違い、閲覧者の状態に依存するのかと思いましたが、
結局(2)の結果と同じく、すべて未登録者の扱いとなってしまう。

【試していない】
(4)YouTubeの管理画面で登録者を見ることが出来るので、これをリスト化する。
一覧で登録者全員を見れるわけではないので、一度に取得できないですし、
結局リスト化しても閲覧者がどのIDか判断することができない

(5)Youtube APIを使う
動画情報などは取得できますが、閲覧者に対して使えるものはない?

(6)YouTubeのチャンネル登録ボタンを当WEBサイトに設置して、
スクショを撮りそれを解析する。
そんなマウスマクロソフトみたいな事がjsなどで出来るのか...

という感じで完全にストップしております。
どなたか思いつく方、ぜひご回答をお待ちしております。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+6

ユーザーがどのチャンネルに登録しているかというのはプライベートなデータなので、あなたのサイトの訪問者があなたのチャンネルに登録しているかという情報をあなたが勝手に得ることはできないようになっているはずです。

YouTube Data APIでOAuthを使って閲覧者のYouTubeアカウントのデータにアクセスする許可を閲覧者から得てから、登録情報を得ることはできると思います。具体的には、ユーザーには例えば下のような画面が表示されて、ユーザーが許可するとアクセストークンがブラウザーに送られ、そこからJSでYouTube Data APIを通じてユーザーのYouTubeアカウントの情報にアクセスできるようになります。
YouTube OAuthの画面

私は使ったことはないですが、特定のチャンネルに登録しているかどうかは下のAPIで取得できるのではないかと思います。
Subscriptions: list - YouTube Data API

その他参考になりそうなページ
Using OAuth 2.0 for JavaScript Web Applications - YouTube Data API
JavaScript コード サンプル - YouTube Data API

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/27 22:14

    回答ありがとうございました。
    YouTube Data APIのOAuthにて実装できました!

    キャンセル

+4

実際に試したわけではないので未確認だけど
YouTube APIで認証したユーザーの購読チャンネルが分かるのでこの中に自分のチャンネルがあればOKと判断すればいい。
https://developers.google.com/youtube/v3/docs/subscriptions/list?hl=ja
まずGoogleアカウントでOAuth認証→APIで購読チャンネル取得。
Google APIは慣れてれば簡単だけど初めて使う場合は面倒なので色々調べることになる。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

軽く調べた感じだと、Googleが用意しているOAuth認証から、ログインユーザのトークンをいただき、
YouTube Data APIからchannelのlistに問い合わせれば行けそうだという感じの事が書いてありました。
https://developers.google.com/youtube/v3/getting-started?hl=ja

詳細はよくわかりません、頑張って調べてみてください。
これがダメなら方法は無いと思って下さい。

ただし、1の状態でチャンネルボタンの表示まで行くなら、YouTubeはiframeに比較的寛容な作りになっているようです。
JSでiframe内に入って中のHTMLタグの情報を持ち帰る事自体は可能です。
ページ内容がロードされるまで待つような仕組みを導入すれば質問文の要件を叶えられるでしょう。
まぁ、YouTube提供側が「iframeでスクレイピングまがいの事されたくないから禁止」と言った時点で終わるので永久に使える保証はありません。


以下は質問文で試した内容の評価です。
これらのテクニックは邪道、もっと言えばフィッシングサイトを作る技術に非常に近いものがあります。

例えを交えて説明します。
悪意のWebサイト開設者としての視点に立って説明しますが、
自分のサイトに訪れた人間のネット銀行にログインしているかを調査し、口座番号を抜き出したり、自分の口座に振り込みをさせたい。
…と言っているのに非常に近い内容だと思って下さい。

何も「お前はフィッシングサイト作ってる犯罪者だー!」と糾弾するつもりではありません。
「Webにはフィッシングサイトをガードするセキュリティ絡みのルールが沢山あり、それにより不可能になる技術が沢山あるよ」って事を知っておいて下さい。

例えば1のiframeを使う方法ですが、URLをネットバンクの1文字違いのドメインを取得したりして、bodyタグの直下にiframeを仕込みつつユーザーの操作ログをJSで抜き出すキーロガー的なフィッシングサイト技術が存在します。
それを防止する為に、「そもそも私のWebサイトはiframeで表示出来ませんよ」とhttp通信のヘッダー部分で宣言しておく事で、Chrome等のブラウザが「ここはifraame禁止のサイトなんだ!?じゃあ今いるサイトはフィッシングサイトかも!?」とiframeの表示を取りやめるような仕組みになっています。

2や3はそのユーザがログインしてないからダメに決まってるでしょ!
3は一見行けそうですが、jquery.xdomainajax.jsというサービスの仕組みの話で
AjaxでのHTTP問い合わせは先方のWebサーバが許可していなければ不可能
→じゃあYahooサーバで代わりにHTTP問い合わせしてよ
→そのYahooサーバはクロスドメインのAjax許可してるからAjax不許可のサイトが取れたわサンキュ
……というカラクリであり、やってる事は2と全く同じです。

ログイン認証は基本的にCookieのキーでやっているので、YouTubeのCookieを抜き出してHTTPリクエストにペタっと貼り付ければ可能ですが、これはXSSスクリプティングの目的と同じです。
ネットバンクのログイン情報を抜き出せば口座番号も振り込みもし放題だぜhehe...と同じ事を言っているので、
当然ガードも固くなり他人のWebサイトのCookie情報を抜き出す事は出来ません。

4はまぁやっても多分無駄、6はそもそもイベント仕込めるんじゃね?1の劣化だからやる意味ない。
…とまぁ、こんな感じです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る