KOSEN{BLOG}について

PC内時間のズレを検出する。

はじめに

前回の記事で行ったインターネット時報の値をスクリーンショットで取得しdatetime.datetime.now()との差を出しました。

前回の記事はこちら

しかし、毎回同じ秒数ズレてるとは限らないと思います。

なので自動購入のコードを動かす前に時報とdatetime.datetime.now()の差を出す。

この値を使うことでなるべくズレを少なくすることができると考えた。

時間のズレの修正は次の記事で行ってます。IF文を用いて行いました。

方法

  1. インターネット時報の値をbeautifulsoup4(bs4)requestsを使い取得する。
  2. pcの時間とその値の差を出す。
  3. 出た値を使ってズレを修正する。

beautifulsoup4,requestsはコマンドプロンプトでpipを使いインストールできます。

pip install beautifulsoup4

インターネット時報の値をbs4,requestsを使い取得する。

CAUTION
張っていたWEBページは日本情報通信機構が公開している日本標準時をベースにして時刻表示しているので、直接日本情報通信機構から日時を取得することにします。
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文で対処したいと思います。

また内部の時間自体をそのサーバーにすればいいって考えがあると思います。
もちろん試しました。

でも誤差は生じるためこのように対処しました。

プログラムとインターネット時報の若干のズレが気になる人など参考になればと思います。

コメントを残す

メールアドレスが公開されることはありません。