中古車価格をウォッチする

カーセンサーのAPIを使用してデータを取得する方法を書きました。
もうちょっと進化させて、平均価格、売られている台数を計算し、メールで送信するようなスクリプトを作ってみました。
スクリプトはシェルとPython。私は、プログラム経験はHello worldレベルで、ググってスクリプトを切った張ったして動作した、レベルです!

ノアの販売価格

検索クエリ

JSON形式でダウンロードし、jqにて必要データだけ取り出し、CSVで保存。ヘッダをsedで挿入です。もっと簡単なやり方がありそうですが、私にはこれが限界。APIキーは自分で取得して、XXXXXXXXXXと置き換えてください。

$ cat query_noah.sh
#!/bin/bash
for i in {2014..2017}
do
curl=`cat <<EOS curl http://webservice.recruit.co.jp/carsensor/usedcar/v1 --get --data 'key=XXXXXXXXXX' --data 'brand=TO' --data-urlencode 'model=ノア' --data 'count=100' --data 'format=json' --data 'year_old=${i}' --data 'year_new=${i}' --data-urlencode 'keyword=2.0 G' EOS`
eval ${curl} | jq -r '.results.usedcar[]
| select ( .grade | contains("4WD") | not )
| [.id, .model, .year, .price, .odd, .color, .grade]
| @csv' > noah-${i}-date "+%Y%m%d".csv
sed -i '1s/^/"id","model","year","price","odd","color","grade"\n/' ./noah-${i}-date "+%Y%m%d".csv
done

CSVを整形

上のスクリプトでnoah-“YYMMDD”.csv形式で書きだしたので、これをPythonを使って平均値、台数を計算します。これで、out2.txtというファイルに結果を書き出します。

$ cat ReadCSVnCalc.py
#!/usr/bin/python3.6
import csv
import pandas as pd
from pandas import DataFrame,Series
import datetime
import smtplib
import os.path
if os.path.exists('out2.txt'):
os.remove('out2.txt')
date = datetime.date.today().strftime("%Y%m%d")
for i in range(2014,2018):
filename = "noah-"+ str(i) +"-" + date + ".csv"
print(filename)
df = pd.read_csv(filename,header=0,encoding='utf-8')
#標準出力ではなくファイルに出力する
with open('out2.txt', 'a') as f: print(i,"年", file=f) print("平均価格","{:,.0f}".format(average), file=f) print("台数",len(df), file=f) print("", file=f) print(open('out2.txt').read())

メールで送信

Pythonで書き出したファイルを読み込み、本文としてメールで送信します。

$ cat sendmail-noah2014-17.py
#!/usr/bin/python3.6
import smtplib
from email.mime.text import MIMEText
body = './out2.txt'
with open(body, 'r', encoding='utf-8') as file:
body = file.read()
from_address = 'carsensor@bodaboda.info'
to_address = 'to-my-mail-address@gmail.com'
charset = 'ISO-2022-JP'
msg = MIMEText(body, 'plain', charset)
msg['Subject'] = 'noah 2014-17 prices.'
msg['From'] = from_address
msg['To'] = to_address
s = smtplib.SMTP('localhost')
s.send_message(msg)
s.quit()

定期実行

cronに上の3本のスクリプトを登録すれば、定期的に登録年ごとの結果をメールで確認できるのです。

out2.txtの内容はこんな感じです。2014年と2015年では10万販売価格が変わらないというのが面白いですね。新車価格264.3万なので、4年乗っても販売価格は新車の74.7%、66.8万落ちってことになります。驚きました。

$ cat out2.txt
2014 年
平均価格 1,974,409
台数 22
2015 年
平均価格 2,097,353
台数 17
2016 年
平均価格 2,265,111
台数 9
2017 年
平均価格 2,516,833
台数 6

 

「中古車価格をウォッチする」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください