[PowerShell] Microsoft Rewardsポイントを稼ぐためのBing検索URLを生成する

Microsoft Rewardsは、Bing検索などMicrosoftのサービスを利用することでポイントを貯めることができるサービス。

004.png

以前から存在は知っていたが何となく敬遠していた。

最近Bing AIを使い始めたことでにBing検索の活用頻度が増えたので、ついでに登録してみた。

 

 

ミッションはほぼBing検索のみ

一応Microsoft Storeで商品を買うことでもポイントは貯まるが、基本的にはPCとスマホアプリでBing検索をすることでポイントが貯まる仕組み。

006.png

デイリークエストもあるが、クリックしてその単語を検索するだけorクイズ形式(何回ミスしてもOK)なのでクリアは簡単。

多少の変動はあるものの、一日で300強のポイントが貯まる。

005.png

15日ほど続ければ5250ポイントでアマギフ600円分が貰えるぐらいにはなる。

手間暇かかる割に30日みっちりやって1200円と思うとかなりしょっぱいが、いわゆる「ポイ活」といわれる活動の中では割のいい数字ではある。一応。

 

スマホのBingアプリが意外とよくできてて驚く

これを機にスマホのBingアプリを入れてみた。

007.png

見た感じ「ただのBing検索アプリか」「Edge起動した時の画面そっくりだな」という感想だった。が、実はブラウザとして割としっかり作られていて、タブ機能とかニュースとかも揃っている。

他アプリで文字を選択して検索🔍すると

009.png

Bingが検索用のアプリケーションとして選択でき、タップすればそのままBingがブラウザとして立ち上がるため、シームレスに検索が可能になっている。

ホーム画面に検索ウィジェットを追加することも可能なので、ほぼGoogle検索と同じ感覚で使えるのはありがたい。

013.png

また、設定画面ではAdblock Plusが使えることも分かった。

Firefoxのように拡張機能が使えない代わりに、アプリ単体でも痒い所に手が届く仕様になっているのは素晴らしい。

 

毎日の検索ノルマが地味に面倒くさい

毎日スマホで20回、PCで30回検索することで150ポイントが手に入る。

003.png

スマホの方は普段からBingで検索するようにすればクリアできるのだが、PCの方はChrome+Google検索が定着してしまっており、思い出した時にEdgeを立ち上げて使用する程度。これではなかなか回数が稼げない。

あんまりやりたくはない手だが、「とりあえず何か検索して回数を稼ぐ」方法を確立したい。

 

Googleトレンドに検索ワードを生成してもらう

Googleトレンドを使えば「今日のホットワード」をずらっと取得できる。

002.png

これをBing検索に放り込むことで毎日のトレンドを把握してみよう。ついでに検索回数も稼げるし。

 

さくっとPowerShell

Windows環境でWebからデータを取ってきて簡単な加工をするのであればPowerShellが手軽だ。インストール不要で開発・実行できるし、他のWindows環境に持って行っても大抵は動く。

Googleトレンドの急上昇ワードはAtom(XML)で取得できる。

https://trends.google.co.jp/trends/hottrends/atom/hourly

日本語の内容を取得したい場合はこっち

https://trends.google.co.jp/trends/trendingsearches/daily/rss?geo=JP

PowerShellでこのようなWeb URIからデータを取得するにはInvoke-WebRequestを使用する。

[xml]$Response = Invoke-WebRequest -Uri "https://trends.google.co.jp/trends/hottrends/atom/hourly"

これで$Responseに取得データが格納される。

※XMLデータとして認識されないことがあったので型指定を追加

そして取得した内容はechoで表示できる。

010.png

入れ子構造(構造体)になっている場合は.(ドット)で繋げばいい。最終的に

$Response.rss.channel.item

にトレンドワードが複数格納されていることが分かった。

011.png

titleがワード自体で、ほかにも画像へのリンクやトラフィック数も格納されている。

今回必要なのはtitleだけだが。

 

ホットワードのみを抽出する

foreachを使用して複数のitemからtitleだけを抽出してみる。

ForEach ($msg in $Response.rss.channel.item){echo $msg.title}

012.png

このようにワードだけを抽出できた。

あとはBingの検索URLと合体させ、

ForEach ($msg in $Response.rss.channel.item){echo "https://www.bing.com/search?q=$($msg.title.Replace(" ", "+"))"}

とすることで即座にBing検索できるURLを生成することができた。

001.png

スペースを+に置き換えているのは、空白があるとそこでURLが切れてしまうから。

スペース以外にも'とか特殊な文字が入ると切れてしまうのだが、細かいところは割愛した。

Power Automateとかを使えば更に全自動化もできるんだろうけど、あんまりやりすぎると不正利用としてみなされてしまう恐れもある。

今回はあくまで「Bingでトレンドワードを検索して流行を把握したい」が目的なので、一つずつ手動でページを開いて検索結果に目を通しやすい方法を採った。

もしページを開くところまで自動化するのであれば、echostartに置き換えて

ForEach ($msg in $Response.rss.channel.item){start "https://www.bing.com/search?q=$($msg.title.Replace(" ", "+"))"; Start-Sleep -s 3}

あまりにも早くページを開きすぎるとポイントが加算されないことがあるので、1つのリンクを開く度に3秒待機させることで、3秒ごとに順番にページを開くことができる。

また、Edgeを「通常使うブラウザ」に設定していないがEdgeでリンクを開きたい場合は以下のようにすればよい。

ForEach ($msg in $Response.rss.channel.item){start microsoft-edge:"https://www.bing.com/search?q=$($msg.title.Replace(" ", "+"))"; Start-Sleep -s 3}

 

BATやVBSの時代は終わったか

これまでお手軽バッチスクリプトはBATやVBSを使っていたが、Webアクセスしようとすると難易度が急激に上がるし、構造体や配列、リストといった概念を持ち込むのも難しい。

PowerShellなら上記のようにWebもリストも簡単に扱える上、C#やVB.NETのコードを動かすこともできるなど拡張性も高く、近代的な言語に慣れている人にとっても扱いやすい。

バッチスクリプトとして使用しようとすると実行ポリシー(セキュリティ設定)が壁があってちょっと面倒くさいものの、使い勝手は抜群なので今後もちょくちょく使っていきたい。

コメントする