ポイ活支援プログラム改善! Microsoft Rewards編
先日作成したMicrosoft Rewardsのポイント獲得を楽にするツールをバージョンアップしました。今回は改善点を紹介しつつ、記事の最後にソースコードを掲載しています!
改善点① カウント漏れ防止(ゆっくり開く)
本ツールでは、いっぺんにたくさんの検索を実行していたためRewardsのシステムがそのすべてをカウントしてくれず、既定のポイントをもらうためにかなり余計に検索を実行する必要がありました。
今回はそれを、ひとつ検索するたびに1秒待つことでRewardsシステム側のカウント漏れを少なくしました。
みなさんが利用しているブラウザや通信環境が影響するので改善の度合いには差があるのですが、ぼくの手元のPC環境ではこれまでの[100検索]ではなく[30検索]でほぼ満額(90ポイント)を得られるようになりました。足りないときは追加で[10検索]をすればOK、という感じです。
このため[100検索]は廃止し、まとめて検索するボタンは[10検索]から[50検索]までに整理しました。
改善点② 再実行可能に
これまではRewards側がカウント漏れを起こしても、検索したこと自体は記憶されているらしく、同内容の検索をもう一度実行しても決してポイントをくれませんでした。
そこで検索ワードに5桁のランダム数値を追加し、同じ[10検索]を2回実行しても、検索ワードが微妙に異なるためにポイントをもらえるようになりました。
改善点③ 自動でタブを閉じる
100個もタブを開くと、ブラウザごと終了するのにも時間がかかりかなり反応が悪いことがありました。また、「ブラウザを閉じてタブを消してね」という要求もかなり乱暴でダメダメでした。
そこで、検索時に開くタブを"時限式"にすることで、5秒後に自動で閉じるようにしました。もちろん自動で閉じるのはこのツールでまとめて開いたタブだけなので、他のページを勝手に閉じることはありません。
なおタブを時限式にすることができるなんてまったく知りませんでした! 自動で勝手に消えるタブなんて普通なら怖いだけですし、なんのためにある機能なのかさっぱりわかりません。有効活用できてよかったですけどね。
今後の課題
PC環境におけるRewardsの"ポイ活"はこれでかなり楽になったのですが、スマホは前途多難です。というのも、スマホのMicrosoft製のBingアプリやEdgeは、Rewards以前に普段からネット接続が途切れやすく、"気分"次第でロクにカウントしてくれないことがあり、時間を無駄にしがちです。今朝テストがてら[30検索]を実行してもらえたポイント、「3」ですよ!? まだ夢のなかにいるのかと思いました。
AndroidならChrome、iPhoneならSafariを使った方が良いのはわかっているのですが、ブラウザ選択の自由は尊重したいのでもうちょっと対策を考えてみようと思います。
では最後に、現状のソースコードを掲載しておきます。変数処理が必要なのでPHPをベースにレイアウトし、"動き"に関わる部分はJavaScriptを出力、最後に<Style>を設定する構成になっています。
<?php
include 'ut.php'; //関数読み込み(OGPなど)
//定数
$url_search='https://www.bing.com/search?q=';
$sitename='にちよう企画班';
$pagetitle='Microsoft Rewards/Bingサーチ支援';
$pageurl="https://nykk.jp/code/bingrewards.php";
$ogppicture="https://nykk.jp/logo640x335.png";
//基礎設定
utHeadBasic($pagetitle,$ogppicture,640);
//OGP設定
utHeadOgp($sitename,$pagetitle,$pagetitle,$pageurl,$ogppicture);
echo '<body>';
echo '<div id="region">';
echo '<p><b>'.$pagetitle.'</b></p>';
echo '</div>';
echo '<br>';
echo '<div id="region">';
echo '<p><b>公式リンク</b></p>';
//rewards
$temp_word='Microsoft Rewardsトップ';
$temp_href='https://rewards.bing.com/';
echo '<a class="linkbuttonsp" href="'.$temp_href.'" target="_blank">'.$temp_word.'</a>';
$temp_word='ポイント確認';
$temp_href='https://rewards.bing.com/pointsbreakdown';
echo '<a class="linkbuttonsp" href="'.$temp_href.'" target="_blank">'.$temp_word.'</a>';
echo '<br>';
echo '</div>';
//まとめて検索リンク
echo '<div id="region">';
echo '<p><b>まとめて検索リンク</b></p>';
$base_href=$url_search.'最新ニュース+'.date('Ymd').'+'; //bing検索用の基礎URL
$dummy=date('Ymd'); //今日の日付(リンクの使用済み判定に用いる)
echo "\n".'<a class="linkbutton" href="#50-'.$dummy.'" onClick="OpenLinks(101,150)">ニュース検索50件</a>'."\n";
echo "\n".'<a class="linkbutton" href="#40-'.$dummy.'" onClick="OpenLinks(151,190)">ニュース検索40件</a>'."\n";
echo "\n".'<a class="linkbutton" href="#30-'.$dummy.'" onClick="OpenLinks(191,220)">ニュース検索30件</a>'."\n";
echo "\n".'<p>';
echo "\n".'<a class="linkbutton" href="#20-'.$dummy.'" onClick="OpenLinks(221,240)">20検索</a>'."\n";
echo "\n".'<a class="linkbutton" href="#10-'.$dummy.'" onClick="OpenLinks(241,250)">10検索</a>'."\n";
echo '</p>'."\n";
echo '<p>※要注意:たくさんのタブがいっぺんに開きます!</p>';
echo '<p>※ブラウザとその設定によっては開かない場合があります(nykk.jpに対してポップアップを許可=ブロック解除すれば動作する場合があります)。</p>';
echo '<br>'."\n";
echo '</div>';
//1件ずつ検索リンク
$count=0;
echo '<div id="region">';
echo '<p><b>1件ずつ検索リンク</b></p>';
while($count<8){
$count=$count+1; //加算
//URL作成
$temp_href=$base_href.$count.'+'.rand(10000,99999);
//表示
$word=''.$count;
echo '<a class="linkbutton" href="'.$temp_href.'" target="_blank">'.$word.'</a>';
}
echo '</div>';
//スクリプト
echo '<script>'."\n";
echo 'function Sleep(wait) {'."\n"; //指定ミリ秒待機する
echo ' var start = new Date();'."\n"; //開始時点を記憶
echo ' while (new Date() - start < wait);'."\n"; //経過待ち
echo '}'."\n";
echo 'function OpenLinks(begin,end){'."\n"; //指定数値+ランダム値を加えて検索する
echo ' var $ops = [];'."\n"; //配列:開いたタブを記憶
echo ' var $href;'."\n";
echo ' for (let $step = begin; $step < (end + 1); $step++) {'."\n";
echo ' $random = Math.floor( Math.random() * (100000 - 10000) ) + 10000;'."\n"; //ランダム値生成
echo ' $href = "'.$base_href.'" + $step + "+" + $random;'."\n"; //最終URL
echo ' var $op=window.open($href,$step);'."\n"; //開く(検索実行)
echo ' $ops.push($op);'."\n"; //配列に記憶
echo ' Sleep(1000);'."\n"; //1秒待機
echo ' }'."\n"; //for終了
echo ' $ops.forEach(function(op) {'."\n"; //全タブを5秒後に閉じる設定
echo ' setTimeout(() => op.close(), 5000);'."\n"; //タイムアウト指定
echo ' });'."\n"; //foreach終了
echo '}'."\n"; //function終了
echo '</script>'."\n";
echo '</body>';
?>
<style>
*{
text-decoration:none;
}
p{
margin-block-start:10px;
margin-block-end:10px;
}
#region{
display:block;
width:560px;
height:auto;
}
a.linkbutton,a.linkbuttonsp{
display:inline-block;
width:auto;
min-width:30px;
margin-right:20px;
margin-bottom:20px;
padding-top:14px;
padding-bottom:14px;
padding-left:10px;
padding-right:10px;
background-color:rgba(240,220,120,1.0);
border-radius:10px;
color:rgba(80,75,40,1.0);
font-weight:bolder;
text-align:center;
}
a.linkbutton:visited{
background-color:rgb(230,230,230);
color:rgba(180,180,180);
}
a.linkbuttonsp{
background-color:rgba(100,150,200,0.5);
color:rgba(30,50,65);
}
a.linkbuttonsp:visited{
background-color:rgba(100,150,200,0.5);
color:rgba(60,90,120);
}
</style>
この記事が気に入ったらサポートをしてみませんか?