目次
はじめに
前回の記事で行ったインターネット時報の値をスクリーンショットで取得しdatetime.datetime.now()との差を出しました。
前回の記事はこちら
自動購入の際の問題しかし、毎回同じ秒数ズレてるとは限らないと思います。
なので自動購入のコードを動かす前に時報とdatetime.datetime.now()の差を出す。
この値を使うことでなるべくズレを少なくすることができると考えた。
時間のズレの修正は以下の記事で行ってます。IF文を用いて行いました。
Python if文方法
- インターネット時報の値をbeautifulsoup4(bs4)、requestsを使い取得する。
- pcの時間とその値の差を出す。
- 出た値を使ってズレを修正する。
beautifulsoup4,requestsはコマンドプロンプトでpipを使いインストールできます。
pip install beautifulsoup4
インターネット時報の値をbs4,requestsを使い取得する。
import requests
from bs4 import BeautifulSoup
import time
r = requests.get('https://ntp-a1.nict.go.jp/cgi-bin/jst')
soup = BeautifulSoup(r.text,'lxml')
t1 = soup.find("body").string
t2 = t1.rstrip('\n')
https://ntp-a1.nict.go.jp/cgi-bin/jstからHTMLをとってきてます。
とってきたHTMLはr変数に入ります。
日本情報通信機構のサイトに行って確認してみてください。
rという変数はtextをつけないとbs4で使えません。
soup変数を用意しHTMLデータをスクレイピングできる形にします。
lxmlというのは HTMLパーサーで「lxmlというツールでresponse.textを変換します」 という意味になります。
最後の行で時間を表示します。(t1では/nが入るのでt2で消してます。)
t2の出力結果が「3792988160.982」となり秒で表示されます。
bs4の使い方は後日記事にします。
pcの時間と出した値の差を出す。
今までdatetime.datetime.now()を使い時間を取得していたが秒で表記されないので今回はtime()を使います。
import time
t = time.time()
しかしこれでは型の違いが出ます。str型とfloat型となり計算できません。
なのでt2をfloat型にして計算します。
t4 = float(t2)-t3
これで計算は終わりです。
全体のコード
import requests
from bs4 import BeautifulSoup
import time
r = requests.get('https://ntp-a1.nict.go.jp/cgi-bin/jst')
soup = BeautifulSoup(r.text,'lxml')
t1 = soup.find("body").string
t2 = t1.rstrip('\n')
t3 = time.time()
t4 = float(t2)-t3
print(t2,t3,t4)
今後の課題
時間のズレは遅れたり進んだりします。
遅れた場合にはこうする。進んでる場合はこうする。
と場合によって違う処理を行いたい
以下の記事でif文で対処してます。
Python if文また内部の時間自体をそのサーバーにすればいいって考えがあると思います。
もちろん試しました。
でも誤差は生じるためこのように対処しました。
プログラムとインターネット時報の若干のズレが気になる人など参考になればと思います。
無料でPythonが学ぶオススメ講座
techgym(テックジム)というプログラミングスクールが初心者向けに週4で無料講座を開いてくれています。
プログラミングの勉強法などから教えてくれます。
直接的に自動購入Botのことやスクレイピングについては学べませんが、
Pythonの基礎が学べるので第一歩としておすすめします。
また、参加後には講座についていけなかったり復習したい方向けに解説動画ももらえます。
Python勉強してみたいなーと思っている方は一度参加してみてはいかがでしょうか?
テックジムのサイトはこちら
以下の記事で詳しく書いてみたのでよかったら覗いてみてください。
【無料】ゼロからPython学習したいなら「テックジム」がおすすめ!