TwitterAPIを利用して「Twitterでフォローしてくれたユーザにのみコンテンツを閲覧させる」といった事を実現する方法。
以前、「画像等のファイルをダウンロードさせる場合に、Twitterアカウントでの認証及び、ダウンロードした旨のツイートを強要するサンプル。」といった記事を書きましたが、それと似たような記事です。
「Twitterでフォローしてくれた相手にのみコンテンツを閲覧させる方法」の紹介です。
PHPライブラリ abraham/twitteroauthを利用しています。
サンプル〜って事で例外とかも考慮してないですし、Noticeもガン無視しています。
コンテンツを閲覧する際に強制的にフォローさせる(アプリケーションタイプ Read and writeの選択が必要)
config.php
<?php define('CONSUMER_KEY', 'コンシューマキー'); //Consumer keyを入力 define('CONSUMER_SECRET', 'コンシューマシークレット'); //Consumer secretを入力 //twitteroauth.phpへのパスを入力。OAuth.phpに依存しているので同階層にOAuth.phpも配置する。 define('TWITTER_OAUTH_PATH', 'twitteroauth.php'); define('SCREEN_NAME', 'スクリーンネーム');//フォローさせたいアカウントのスクリーンネームを入力 define('BASE_URL', 'http://' . $_SERVER['SERVER_NAME'] . dirname($_SERVER['SCRIPT_NAME']) . '/');
index.php(認証要求)
<?php session_start(); require_once './config.php'; //config読み込み require_once(TWITTER_OAUTH_PATH); //twitteroauthの読み込み //インスタンスの生成。リクエストトークンを持っている場合はリクエストトークンも渡す。 $tw = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['request']['oauth_token']? : null, $_SESSION['request']['oauth_token_secret']? : null); switch ($_GET['mode']) { case 'request': $_SESSION['request'] = $tw->getRequestToken(BASE_URL . '?mode=token'); //リクエストトークンの取得してセッションに代入。 header('Location:' . $tw->getAuthorizeURL($_SESSION['request'], false) . '&force_login=true'); //認証URLを取得してリダイレクト。 break; case 'token': $_SESSION['access'] = $tw->getAccessToken($_GET['oauth_verifier']); //アクセストークンを取得してセッションに代入 header('Location: ' . BASE_URL.'secret.php'); break; default : session_destroy(); echo '○○を閲覧するには@'.SCREEN_NAME.'をフォローする必要があります。<br><a href="?mode=request">こちらからTwitterアカウントで認証</a>すると@'.SCREEN_NAME.'を自動的にフォローします。'; }
secret.php(フォローしてくれた人専用コンテンツ)
<?php session_start(); require_once './config.php'; //config読み込み require_once(TWITTER_OAUTH_PATH); //twitteroauthの読み込み //アクセストークンを持ってない場合はTwitterアカウントでの認証を促すメッセージを表示。 if (isset($_SESSION['access']['oauth_token']) && isset($_SESSION['access']['oauth_token_secret'])) : $tw = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['access']['oauth_token'], $_SESSION['access']['oauth_token_secret']); //インスタンスの生成 //APIを利用したフォローアクション。 $tw->post('friendships/create', array('screen_name' => SCREEN_NAME)); /* * 実際に使うなら、既にフォローされている場合はフォローアクションを実行せずにコンテンツを表示するとか、成功したか否かも一応チェックする事もした方が良いけれど省略。 */ /* * これ以降で適当にフォロワー限定コンテンツを出力。 * テキスト以外のコンテンツを扱う場合は、直接アクセス出来ないディレクトリにファイルを配置し、セッションの有無を確認し、プログラム経由で出力した方が良いかもしれない。 */ echo 'とりあえず、フォローしてくれた人用のコンテンツ。いやん♪えっち!'; else: //アクセストークンを持っていない場合、indexにリダイレクト。 header('Location: '.BASE_URL); endif;
サンプルのindexページ
該当アカウントをフォローしているか否かをチェックし、フォローしているならコンテンツを表示する(アプリケーションタイプ Read only でOK)
基本部分は上述している「強制フォロー」と同じ感じですが、Read only ではAPIを利用した新規フォローは出来ないので…。
単純に認証前ページで「○○をフォローしていないとコンテンツを閲覧する事が出来ない。フォローしてから認証してね!」といった案内でも乗せておいて、認証後にフォローしているか否かを、friendships/showなどで確認しフォローされている場合は、コンテンツを表示といった処理を行えば良いです。
(何気に言いたいのは「オチ」の部分ですし、途中で打つのめんどくさくなったのでソース省略します。)
オチ
んでもね…。
この手の「フォローしてくれたら」とか「ツイートしてくれたら」とかって、用が済んだら即フォロー解除されたり、ツイート削除されたりとかが多いと思うんですよね〜。
ちょっと話が変わりますが、以前、自身が運営しているWEBサービス「かたおもったー」に「ツイートしてくれたら一覧画面上の広告一時的に削除!」みたいな機能を実装して絶望した事があります。
その件についての詳細は
かたおもったーに「ツイートしてくれたら一時的に広告非表示」みたいな機能を実装してみて、少し絶望した話。
をご覧下さい。
更に話は変わりますが、以前、ドロップシッピング関連の自作のWordPressプラグインを「メールマガジンの購読を必須」として配布していた事がありますが、プラグインをダウンロード直後したその数分後には「メルマガ購読を解除」されたりとかが非常に多かったです。
まぁ、なんというか、この手の「見返り」を露骨に要求するような試みは、「抗いたい気持ち」をむしろ刺激してしまうのかもしれませんね。
何故か、メルマガ未購読者からの問い合わせメールや要望メールが非常に多かったですが…。