スプレッドシートの名前をGASで変えたいという相談がありましたので、解説します
まずはいつもどおりアクセスしてください。
script.google.com
引用:
https://script.google.com/
ここまでは余裕ですね?
まずはいつもどおりアクセスしてください。
script.google.com
引用:
https://script.google.com/
ここまでは余裕ですね?
毎日、広告収益が上がってきます。
その数値をいちいちサイトにアクセスしていては大変です。
自動で収益を記録しましょう。
本サイトでのグラフはAdSense規約に乗っ取り、ページビューや収益の具体的数値は除いて掲載しています。
値の公表はポリシー違反になりますので、ご了承ください。
最終目標はこのようなグラフを自動生成して、サイト別の収益率の計測に使います。
その日のクリック単価や収益を計測することができます。
これを追っていれば、ブログの収益率をトレースができます。
詳細な値などは今回は非掲載です。
GASのAPIのうち、プログラムからAdSenseを利用するライブラリをオンにしてください。
ここは詳しくは解説したいのでリンクを貼っておきます。
note.com
引用:
https://note.com/mangapostjapan/n/n96223145a99d
function myFunction(){ //昨日の日の収益を移動 // 現在アクティブなシートを取得 var sheet = SpreadsheetApp.openById(ご自身のスプレッドシートID); //先日のAdSenseデータの移動 sheet.getRange("A2:J1000").moveTo(sheet.getRange("A3")); // 今日の日付を格納 var date = new Date(); Logger.log(Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy-MM-dd')); var today = Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy-MM-dd')-2; sheet.getRange("A2").setValue(today); //一週間前を取得 var date = new Date(); //現在日時のDateオブジェクトを作る var today = Utilities.formatDate(date, 'JST', 'yyyy-MM-dd'); //現在の「日」を取得 var day = date.getDate(); Logger.log(day); //5 //前日日付にしたいので-1する date.setDate(day-7); Logger.log(date); //Wed Sep 04 19:33:33 GMT+09:00 2019 //日付の表示形式を整形する var lastweek = Utilities.formatDate(date, 'JST', 'yyyy-MM-dd'); Logger.log(lastweek); //2019/09/04 var adClientId = 'ca-pub-自身のID'; var startDate = lastweek; var endDate = today; var metrics = ['PAGE_VIEWS', 'CLICKS', 'PAGE_VIEWS_CTR', 'COST_PER_CLICK', 'PAGE_VIEWS_RPM','EARNINGS']; var args = {'metric': metrics, 'dimension': ['WEEK'], 'filter': ['AD_CLIENT_ID==' + adClientId], }; var report = AdSense.Reports.generate(startDate, endDate, args).getRows(); Logger.log(report[1]); Logger.log(report[1][1]); sheet.getRange("A2").setValue(report[1][0]); sheet.getRange("B2").setValue(report[1][1]); sheet.getRange("C2").setValue(report[1][2]); sheet.getRange("D2").setValue(report[1][3]); sheet.getRange("E2").setValue(report[1][4]); sheet.getRange("F2").setValue(report[1][5]); sheet.getRange("G2").setValue(report[1][6]); //pv取得 var pv =sheet.getRange("B2"); var pv2 = pv.getValue(); //クリック数取得 var click =sheet.getRange("C2"); var click2 = click.getValue(); //CTR取得 var ctr =sheet.getRange("D2"); var ctr2 = ctr.getValue();+"\nCTR:"+ctr2 //CPC取得 var cpc =sheet.getRange("E2"); var cpc2 = ctr.getValue(); //RPM取得 var rpm =sheet.getRange("F2"); var rpm2 = ctr.getValue(); //収益取得 var earn =sheet.getRange("G2"); var earn2 = ctr.getValue(); //総収益 var all =sheet.getRange("J1"); var all2 = ctr.getValue(); var messageText = "\n"+today+"\nPV数:"+pv2+"\nクリック数:"+click2+"\nCPC:"+cpc2+"\nRPM:"+rpm2+"\nEARN:"+earn2+"\n\n総収益"+all2; // LINEから取得したトークン let token = "QpjE3wuAyu0uuGHB5LLfoxBcb5nET9GlYhe4JrlVTWY" let options = { "method" : "post", "headers" : { "Authorization" : "Bearer "+ token }, "payload" : { "message" : messageText } } const FValues = sheet.getRange('A:A').getValues(); //A列の値を全て取得 var lastrow = FValues.filter(String).length; //空白の要素を除いた長さを取得 let url = "https://notify-api.line.me/api/notify" if(sheet.getRange("C"+lastrow).getValue() !== ""){ UrlFetchApp.fetch(url, options) } }
このコードで完動します。
約60行ほどのコードですが、収益の記録を行ってくれるコードになります。
コードの設置もサポートいたしますので、その際はご相談ください。
有償でサポートいたします。
kazukichi0914.hatenablog.com
引用:
https://kazukichi0914.hatenablog.com/entry/2020/10/10/100251
その当時は毎日なんスターが付いているかトレースできたので満足でした。
毎日はてなスターの獲得を確認したいなと思っていました。
せっかくなら記事別にスターの獲得数を知りたいです。
完成体は、
こんな具合にはてなスターの推移が見られます。
でも一つの疑問が浮かびました。
このはてなスターはどこの記事に付与されているんだろう?
なので、もうちょっとプログラムを改修してはてなスターのついている記事を特定します。
こんなメールが毎日日次ではてなから送られてきます。
このメールを解析してカレンダーに書きましょう!という算段です。
このメール本文を見れば、
先日公開されたYOASOBI「夜に駆ける」のEnglishバージョンがかっこいい!に
少納言 (id:syounagon) ☆
めるママっくす (id:merumamax) ☆☆☆
ひーろ (id:hirochanna) ☆☆☆
ダイス (id:daiskun) ☆☆☆
もう少しでシングル (id:lowhandicapper) ☆☆☆
金井戸 隆 (id:kaneido) ☆☆☆☆☆
りょうさん (id:ryousankunchan) ☆☆☆
AIBOパパ (id:daiki-em) ☆☆☆
お母ちゃん (id:suoaei) ☆☆☆☆☆☆レモネード専門店「レモニカ」が爆誕!夏も冬もいろんな味のレモネードを楽しめる!
https://kazukichi0914.hatenablog.com/entry/2021/07/03/200000
rieco (id:sora-umi-inu-watashi) ☆☆☆☆☆☆
もう少しでシングル (id:lowhandicapper) ☆☆
金井戸 隆 (id:kaneido) ☆☆☆☆☆
お母ちゃん (id:suoaei) ☆☆☆
AIBOパパ (id:daiki-em) ☆☆☆
sato (id:pirorikin-58) ☆☆☆
という詳細がわかります。
このデータを使います。
function HatenaBlog() { //最新の☆レポートを取得します const query = 'You have new messages.'; const start = 0; const max = 1; const threads = GmailApp.search(query, start, max); const messagesForThreads = GmailApp.getMessagesForThreads(threads); for(const messages of messagesForThreads){ //)を微調整 hatenastar = messages[0].getPlainBody().split("☆")[3] + ")"; //console.log(hatenastar); var count = messages[0].getPlainBody().split("■").length; console.log("スターが付いた記事数は"+(count-2)+"記事"); for(var i=1;i<=count-2;i++){ //ブログ一記事あたりのスター //console.log("記事URL"); //console.log(messages[0].getPlainBody().split("■")[i].split("¥n")[0].split("¥n")[0]); //☆で切る console.log("記事タイトル"); console.log(messages[0].getPlainBody().split("■")[i].split("¥n")[0].split("¥n")[0].split("¥n")[0].split("¥n")[0].split("¥n")[0].split("~ ☆(はてなスター)とは? ~")[0]); } } }
これが改修後のスクリプトです。
短いですが、完動します。
もはや、力技でメール本文をパースしていますが、split関数を使いまくります。
function HatenaBlog() { //最新の☆レポートを取得します const query = 'You have new messages.'; const start = 0; const max = 1; const threads = GmailApp.search(query, start, max); const messagesForThreads = GmailApp.getMessagesForThreads(threads); for(const messages of messagesForThreads){ //)を微調整 hatenastar = messages[0].getPlainBody().split("☆")[3] + ")"; //console.log(hatenastar); var count = messages[0].getPlainBody().split("■").length; console.log("スターが付いた記事数は"+(count-2)+"記事"); for(var i=1;i<=count-2;i++){ //ブログ一記事あたりのスター //console.log("記事URL"); //console.log(messages[0].getPlainBody().split("■")[i].split("¥n")[0].split("¥n")[0]); //☆で切る console.log("記事タイトル"); console.log(messages[0].getPlainBody().split("■")[i].split("¥n")[0].split("¥n")[0].split("¥n")[0].split("¥n")[0].split("¥n")[0].split("~ ☆(はてなスター)とは? ~")[0]); } } }
こちらの27行のコードで、
ブログの詳細データをGoogleカレンダーにこんなアウトプットを死ぬまでしてくれます。
こんなことが27行のコードでできてしまうんですねーGoogleさんさすがです。
split関数を使いまくって文字列を整形しています。
誰がなんの記事にブックマークや☆をくれたのか記録をしていきます。
ブログ運営をする上でなんの記事がPVを増やしてくれているのか解析することは大事です。
なので、さくっとはてなスターの習得の詳細をカレンダーに書き込むスクリプトを書いてみました。
ついたはてなスター・はてブの数を毎日自動記録します はてなブログの頑張りを記録して、モチベーションに
プログラミングなんてできないよーという方も上記サービスで設置までサポートいたします。
一度本サービスを購入いただければGoogleが稼働している限り動作いたしますので、リーズナブルかと思います。
買い切りです。
ブログに登録されているはてなブックマーク数をGoogleカレンダーでトレースしたい。
以前、はてなスターをGoogleカレンダーに書き込むスクリプトを書いたのでそのスクリプトを応用します。
21行のコードで蹴りを付けます。
function myFunction() { var url = 'https://bookmark.hatenaapis.com/count/entry?url=http%3A%2F%2Fkazukichi0914.hatenablog.com%2F'; var data = UrlFetchApp.fetch(url).getContentText(); Logger.log(data) //2k08jhfss282b0q1ukmthp3fnc@group.calendar.google.comのカレンダーに書き込みます //登録するカレンダーIDを呼び出してeventへ格納 var calendar = CalendarApp.getCalendarById('自分のカレンダーID@group.calendar.google.com'); //イベントのタイトルをtitleへ格納 //Logger.log(title); var date = new Date(); // 今日の日付を表示 Logger.log(Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy/MM/dd')); Logger.log(date); //createAllDayEventでカレンダーへイベントを登録 calendar.createAllDayEvent("B! "+data,date); }
めっちゃ早いです。
上記スクリプトを書いたら…
トリガーの設置です。
毎日23:00~24:00を目安にはてぶ数を取得して、カレンダーに書き込みます。
できたカレンダーはこちらになります。
あとは死ぬまで自動実行です。
ついたはてなスター・はてブの数を毎日自動記録します はてなブログの頑張りを記録して、モチベーションに
上記サービスをご購入ください。
貴方のはてなブログの実績を自動記録いたします。
なお競合他社のはてぶ数などをトレースしたいなどの要望にもお答えします。
A社やB社についたブックマーク数もトレースします。
全サイトレポートを出すのは簡単だが、こんなグラフを毎週見ているようではめんどくさい。
毎日、運営サイトの収益を効率よく確認するためにはメール通知設定がある。
歯車下の「︙」を押すと収益のメール設定が行えるのである。
毎週、毎月AdSenseサイトレポートを配信する。
そうすると毎月レポートがGoogleから届く。
今月の施策はうまくいったなどの確認ができる。
ぜひ広告収益を増やしたい人は設定したい操作である。
ここを見ながら考えるわけである。
基本的にインターネットは世界中の人全員が同じ風景を見られるわけではない。
パスワードを知っている人しか見られないページ、特定の条件を満たさないと見られないページが存在する。
より収益化をするためのスペシャリストがついてくれるのである、
YouTuberにそのような仕組みがあるのかは不明だが、AdSenseの秘密のリソースにアクセスすることができるのである。
GoogleではもはやプログラムからAdSenseにアクセスできる仕組みが用意されていて
AdSense Management APIをオンにすると使用できる。
function myFunction(){ //昨日の日の収益を移動 // 現在アクティブなシートを取得 var sheet = SpreadsheetApp.openById('1*********************************************'); //先日のAdSenseデータの移動 sheet.getRange("A2:J1000").moveTo(sheet.getRange("A3")); // 今日の日付を格納 var date = new Date(); Logger.log(Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy-MM-dd')); var today = Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy-MM-dd')-2; sheet.getRange("A2").setValue(today); //一週間前を取得 var date = new Date(); //現在日時のDateオブジェクトを作る var today = Utilities.formatDate(date, 'JST', 'yyyy-MM-dd'); //現在の「日」を取得 var day = date.getDate(); Logger.log(day); //5 //前日日付にしたいので-1する date.setDate(day-7); Logger.log(date); //Wed Sep 04 19:33:33 GMT+09:00 2019 //日付の表示形式を整形する var lastweek = Utilities.formatDate(date, 'JST', 'yyyy-MM-dd'); Logger.log(lastweek); //2019/09/04 var adClientId = 'ca-pub-3647961026085475'; var startDate = lastweek; var endDate = today; var metrics = ['PAGE_VIEWS', 'CLICKS', 'PAGE_VIEWS_CTR', 'COST_PER_CLICK', 'PAGE_VIEWS_RPM','EARNINGS']; var args = {'metric': metrics, 'dimension': ['WEEK'], 'filter': ['AD_CLIENT_ID==' + adClientId], }; var report = AdSense.Reports.generate(startDate, endDate, args).getRows(); Logger.log(report[1]); Logger.log(report[1][1]); sheet.getRange("A2").setValue(report[1][0]); sheet.getRange("B2").setValue(report[1][1]); sheet.getRange("C2").setValue(report[1][2]); sheet.getRange("D2").setValue(report[1][3]); sheet.getRange("E2").setValue(report[1][4]); sheet.getRange("F2").setValue(report[1][5]); sheet.getRange("G2").setValue(report[1][6]); //pv取得 var pv =sheet.getRange("B2"); var pv2 = pv.getValue(); //クリック数取得 var click =sheet.getRange("C2"); var click2 = click.getValue(); //CTR取得 var ctr =sheet.getRange("D2"); var ctr2 = ctr.getValue();+"\nCTR:"+ctr2 //CPC取得 var cpc =sheet.getRange("E2"); var cpc2 = ctr.getValue(); //RPM取得 var rpm =sheet.getRange("F2"); var rpm2 = ctr.getValue(); //収益取得 var earn =sheet.getRange("G2"); var earn2 = ctr.getValue(); //総収益 var all =sheet.getRange("J1"); var all2 = ctr.getValue(); var messageText = "\n"+today+"\nPV数:"+pv2+"\nクリック数:"+click2+"\nCPC:"+cpc2+"\nRPM:"+rpm2+"\nEARN:"+earn2+"\n\n総収益"+all2; // LINEから取得したトークン let token = "QpjE3wuAyu0uuGHB5LLfoxBcb5nET9GlYhe4JrlVTWY" let options = { "method" : "post", "headers" : { "Authorization" : "Bearer "+ token }, "payload" : { "message" : messageText } } const FValues = sheet.getRange('A:A').getValues(); //A列の値を全て取得 var lastrow = FValues.filter(String).length; //空白の要素を除いた長さを取得 let url = "https://notify-api.line.me/api/notify" if(sheet.getRange("C"+lastrow).getValue() !== ""){ UrlFetchApp.fetch(url, options) } var date = new Date(); //今日の日付を表示 Logger.log(Utilities.formatDate( date, 'Asia/Tokyo', 'yyyyMMdd')); Logger.log(date); var calender = CalendarApp.getCalendarById("*******************@group.calendar.google.com"); calender.createAllDayEvent( "収益:¥"+earn2 , new Date(date) ); }
このソースで収益をカレンダーに記録する。
週末金曜日に収益をカレンダーに書き込んでくれるので自身で確認する必要はない。
以下のサービスを購入していただければ、AdSenseバージョン専用カレンダーを作成いたします。
毎月カレンダーに先月の給与明細のようにAdSense収益が上がってくるのでブログを書くやる気が出る。
はてなブログについたスターの数を毎日自動記録します はてなブログの頑張りを記録して、モチベーションに
興味ある方はご購入ください。
コロナ禍の部下の労務管理は上司にとって大変です。
部下がどんな仕事をしているのか遠隔から見守らないといけないですからね。
とはいえ、上司に「今日はこんな件数の処理を行いました」と
手作業でメールを送ってリモートで報告するのはめんどくさいです。
ぜひ自動化しましょう。
プログラミングを使えば毎週金曜日17:30に上司に報告するなんてことは朝飯前です。
本言語はGoogleAppsScriptで書かれていますので、誰でも
script.google.com
引用:
https://script.google.com/home
にアクセスすれば使えます。
さて、いきなりですがソースです。
function getUserLabelsSample() { //日付けオブジェクトを作る var date = new Date(); //スプレッドシートのkeyを指定して取得 var spreadsheet = SpreadsheetApp.openById('自分のスプレッドシートid'); const start = 0; const max = 100; var date = new Date(); //現在日時のDateオブジェクトを作る var today = Utilities.formatDate(date, 'JST', 'yyyy/MM/dd'); Logger.log(today); //2019/09/05 //現在の「日」を取得 var day = date.getDate(); //Logger.log(day); //今日の日付 //前週日付にしたいので-1する date.setDate(day-7); //Logger.log(date); //Wed Sep 04 19:33:33 GMT+09:00 2019 var startday = date; //日付の表示形式を整形する var lastweek = Utilities.formatDate(startday, 'JST', 'yyyy/MM/dd'); //Logger.log(lastweek); //2019/09/04 Logger.log("label:Google after:"+lastweek); const threads = GmailApp.search("label:Google after:"+lastweek); const messagesForThreads = GmailApp.getMessagesForThreads(threads); Logger.log("Google件数"+messagesForThreads.length); for(const messages of messagesForThreads){ Logger.log(messages[0].getSubject()); } const recipient = 'xxxxxxxxxxxx@gmail.com'; //送信先のメールアドレス const subject = '今週の処理件数'; const recipientName = 'テスト'; const body = messagesForThreads.length+'件'; const options = {name: 'かずきち。'}; GmailApp.sendEmail(recipient, subject, body, options); }
このソースをコピペしてもらえれば、先週から今日にかけて「Google」というラベルが付いているメール件数をxxxxxxxxxxxx@gmail.comに報告するソースです。
使用用途はリモートワークで部下の労務管理を行いたい上司に「今週の業務報告」を送りつけるスクリプトです。
こんなメールが上司に送られるわけです。
解決したのでいいんですが、完全に忘れていた。
プログラミングの言語の一つにPythonがある。
そして、Python2.7とかPython3.9のように同じ言語でも仕様が違う。
同じPythonでも似ているようで全く違う。
江戸時代の日本語と令和の日本語くらい違う。
バージョンアップしたら、完全にパソコン動かなくなったレベルなので3時間悩んでいた。
でも解決したので良かった。
sudo apt install 2to3 << python2.x系で書いたスクリプトを3.x系に直すには「2 to 3」があるが不便すぎるので、 余裕でpythonのージョンを下げた。 ただ今後はバージョンが3.xが主流になると思うので、パソコンを買い替えたら3.xにしようと思います。 [https://www.youtube.com/watch?v=stJIdgMTmVk:title] 引用: [https://www.youtube.com/watch?v=stJIdgMTmVk]
知っている方も多いと思いますが、企業が導入している福利厚生サイトです。
飲食店やレジャー施設の割引情報が掲載されている。
がしかし、ログインが必要なのである。
引用:https://bs.benefit-one.co.jp/bs/pages/bs/top/top.faces
こんなインターフェースでトップ画面にログイン画面がある。
人間がIDとパスワードを入力しないといけないわけだ。
大問題である。
ここのログインを突破して、中の福利厚生情報を全部抜きたい。
このログイン、スクリプトで突破しましょう。
使ったライブラリなどは
import time # スリープを使うために必要 from selenium import webdriver # Webブラウザを自動操作する(python -m pip install selenium) import chromedriver_binary # パスを通すためのコード from selenium.webdriver.common.keys import Keys #タイピング操作 from selenium.webdriver.common.action_chains import ActionChains import time
です。
コード自体は20行くらいで、benefitstationをハックします。
#ChromeDriverのパスを引数に指定しChromeを起動 driver = webdriver.Chrome() #指定したURLに遷移する driver.get("https://bs.benefit-one.co.jp/bs/pages/bs/top/top.faces") actions = ActionChains(driver) actions.perform() driver.find_element_by_id("cmnHederForm:textfield").send_keys("ログインID\tログインパスワード\n") actions = ActionChains(driver) actions.perform() time.sleep(5000)
動作している場面はYouTubeに上げましたのでのちほど。
その前に簡単に解説をします。
webdriver.Chrome()はpythonからGoogleChromeを立ち上げるために使います。
driver.find_element_by_id("cmnHederForm:textfield").send_keys("ログインID\tログインパスワード\n")
actions = ActionChains(driver)
actions.perform()
ここが肝心要のログインを突破する部分です。
詳しく解説していきますね。
ここでやっていることは「cmnHederForm:textfield」というテキストフィールドをブラウザ上から探して、値記入をしているわけです。
で、cmnHederForm:textfieldっていう謎な文字列はどこからでてきたんだ?っていう疑問です。
使うのはGoogleChromeのデベロッパーツールです。
ウェブページの構成要素を洗い出してくれます。
Google Chrome⇢「右上︙」⇢その他のツール⇢デベロッパーツールを立ち上げます。
普通の人は使わない開発者向け機能です。
このページを開くとウェブページの構成やXPATHなどの情報が抜けるんです。
この画像の矢印で囲んである「□」ボタンを押してください。
そうするとウェブページの構成idやPATHが全部抜けるんです。
ここから「cmnHederForm:textfield」というフィールドがID名を入力するボックスのXPathを示していることがわかります。
フィールドを特定したら、そこに文字を入力したいので…
driver.find_element_by_id("cmnHederForm:textfield").send_keys("アカウント名\tパスワード\n") actions = ActionChains(driver) actions.perform()
を書くだけです。めっちゃ短いですよね。アカウントとパスワードには自分のログイン情報を使ってください。
\tはタブキーのエスケープシーケンスです。
プログラムから特殊文字を入力するためのテクニックです。
エスケープシーケンスは言語ごとに異なっていて、
エスケープ シーケンス 文字名 | |
\’ | 単一引用符(「’」) |
\” | 二重引用符(「”」) |
\\ | 円記号(「\」) |
¥0 | null文字 |
\a | アラート音(警告) |
\b | バックスペース |
\f | 改ページ(フォームフィード) |
\n | 改行(ラインフィード) |
\r | 復帰(キャリッジリターン) |
\t | 水平タブ |
\v | 垂直タブ |
引用:https://ict119.com/escapesequence/
自分がC言語を使っているの、pythonを使っているのかによって異なります。
今回はbenefitstationに特化してログインスクリプトを書きましたが、
celeniumでブラウザ操作を自動化します 毎日の提携作業のブラウザ操作やログイン情報入力にも対応
¥15,000〜コードを書くのでソシャゲーの経験値上げを自動化したい、チケットの購入サイトアクセスを自動化したいなど要望にお答えします。
使用言語はpythonになります。
昨今は様々な自動化が世の中にあるわけです。
www.selenium.dev
引用:
https://www.selenium.dev/documentation/ja/
1990年代の改札は駅員が手作業で切符を切っている時代もありました。
まさに「ALWAYS 三丁目の夕日」です。
しかし今は多くのものが自動化され、医療から運転、様々のものが自動化されています。
その中にブラウザ操作の自動化があります。
www.selenium.dev
引用:
https://www.selenium.dev/documentation/ja/
Seleniumブラウザ自動化プロジェクトがあります。
W3C WebDriver仕様のインフラが使えるわけです。
有志貢献者の何千時間に及ぶ個々の時間を費やした事とソースコード自由に利用可能を誰にでも利用、楽しめ、そして改良できることによって実現しました。
とにかく自動化を使いこなしたいのには必要不可欠と言ってはないでしょうか?
pip install selenium
でまずはpythonパッケージを取りに行きましょう。
apt-get
homebrew
pip
コマンドで取りに行きます。
pip install selenium
を叩けば入ると思います。
次はpythonのコードを書きましょう
import time # スリープを使うために必要 from selenium import webdriver # Webブラウザを自動操作する(python -m pip install selenium) import chromedriver_binary # パスを通すためのコード driver = webdriver.Chrome() # Chromeを準備 driver.get('https://www.google.com/') # Googleを開く time.sleep(5) # 5秒間待機 driver.get('https://www.yahoo.co.jp/') # Yahooを開く time.sleep(5) # 5秒間待機 driver.quit()
コードを書いたら、「F5」でRunしましょう。
めっちゃ簡単ですね。
まず前提として、プログラミングで文字を入力するのは単純に「a」をタイプしてではだめなんです。
重要なのは、どこに文字を入力するかプログラム上で指定しないといけないわけです。
文字を打ちたいけど、どこのフォームをしていするのは「Xpath」という概念です。
これがGoogleChrome上でどこのボックスに文字を入力するかの番地です。
ディベロッパーツール「…⇢Copy⇢Copy XPath」でそこのボックスへの道順をコピーできます。
/html/body/ntp-app//div[1]/ntp-realbox//div/input
こんなPATHがそこのテキストボックスへのXPathになります。
driver.find_element_by_id("loginInner_u").send_keys("kazukichi_0914")
loginInner_uにkazukichi_0914という文字列をプログラム上から入力しましょうっていうことを表しています。
GoogleとYahoo!を言ったり来たりしていると思います。
情報に簡単にブラウザ操作の自動化ができました。
人間は何もしていませんよ。
seleniumスクリプトも書きます。
2019年の大学入試センター試験「統計・データ分析」が導入された。
データ分析なんかコンピュータにやらせればいいじゃないか?という気もしますが、
引用:
https://asakura.chiba.jp/archives/8818
こんな問題が2019年に出題されたらしい。
「四分位数(しぶんいすう)」とはデータを小さい順に並び替えたときに、データの数で4等分した時の区切り値のことです。4等分すると3つの区切りの値が得られ、小さいほうから「25パーセンタイル(第一四分位数)」、「50パーセンタイル(中央値)」、「75パーセンタイル(第三四分位数)」とよびます。
そんなの知らんわって感じですが、どうやら今のセンター試験の範囲なようです。
特定のデータセットを4区間に分けるらしいです。
で四部位数なんてどうせ日本でしか通用しない分野なんじゃないの?という感じです。
渋井さんが作った関数レベルです。
英語では
quartile
と言うそうです。
英訳があるなんてことは世界中で使われている概念そうです。
なるほどと、これは勉強する価値がありそうだ。
もしも四部位数が日本だけの概念なら知らなくてもいい気もします。
前回LINEbotを作成したので、
こんな形で通知が来るbotを作りました。
ここに四部位数項目を加えておこうと思います。
グラフを作ってみた感想としては「平均」「最大値」「最小値」を見るだけではなく、データセットの真ん中を取ることで「最頻値」を取ってこれるので、「平均値」とは違う指標になって使い勝手がよさそうです。
四部位範囲 = Q3-Q1
四部位偏差 = 四部位範囲/2
データ活用方法をもう少し解説してくれるとうれしい。
kazukichi0914.hatenablog.com
引用:
https://kazukichi0914.hatenablog.com/entry/2021/05/29/200000
LINEメッセージにBlobして送信するようにします。