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ページ

gamen1

該当アカウントをフォローしているか否かをチェックし、フォローしているならコンテンツを表示する(アプリケーションタイプ Read only でOK)

基本部分は上述している「強制フォロー」と同じ感じですが、Read only ではAPIを利用した新規フォローは出来ないので…。
単純に認証前ページで「○○をフォローしていないとコンテンツを閲覧する事が出来ない。フォローしてから認証してね!」といった案内でも乗せておいて、認証後にフォローしているか否かを、friendships/showなどで確認しフォローされている場合は、コンテンツを表示といった処理を行えば良いです。
(何気に言いたいのは「オチ」の部分ですし、途中で打つのめんどくさくなったのでソース省略します。)

オチ

んでもね…。
この手の「フォローしてくれたら」とか「ツイートしてくれたら」とかって、用が済んだら即フォロー解除されたり、ツイート削除されたりとかが多いと思うんですよね〜。
ちょっと話が変わりますが、以前、自身が運営しているWEBサービス「かたおもったー」に「ツイートしてくれたら一覧画面上の広告一時的に削除!」みたいな機能を実装して絶望した事があります。
その件についての詳細は
かたおもったーに「ツイートしてくれたら一時的に広告非表示」みたいな機能を実装してみて、少し絶望した話。
をご覧下さい。

更に話は変わりますが、以前、ドロップシッピング関連の自作のWordPressプラグインを「メールマガジンの購読を必須」として配布していた事がありますが、プラグインをダウンロード直後したその数分後には「メルマガ購読を解除」されたりとかが非常に多かったです。
まぁ、なんというか、この手の「見返り」を露骨に要求するような試みは、「抗いたい気持ち」をむしろ刺激してしまうのかもしれませんね
何故か、メルマガ未購読者からの問い合わせメールや要望メールが非常に多かったですが…。
shonbori

スポンサード リンク

公開日:2014年03月23日
タグ:, , , ,