iOSアプリ評価件数、星平均数取得pythonスクリプトでサクッと定時集計

#概要
iOSアプリレビュー件数、星平均数取得の２点を日本と海外でそれぞれ取得するスクリプトを作成する
cronで１日１回集計を`dat.csv`へ出力する
フォーマット：`日付、レビュー件数(日本)、レビュー件数(アメリカ)、評価件数(日本)、評価件数(アメリカ)`
出力例：`20200520-22:00:16,80,16,15,5`
(筆者はRaspberryPiを起動しっぱなしにしてるのでそこでこのスクリプトを実行させている)
環境：Python ver 3.5.3

##コーディング
・定義ファイルで`AppStoreID`を自分のアプリの数字に書き換えてください
・空の`dat.csv`と名付けたファイルを同じフォルダに入れておいてください

```python:const.py
## 定義ファイル
class const:
    AppStoreID = 9999999999
    url_jp_app_json = "http://itunes.apple.com/lookup?id="+str(AppStoreID)+"&country=JP"
    url_us_app_json = "https://itunes.apple.com/lookup?id="+str(AppStoreID)
    url_jp_comment_num = "https://itunes.apple.com/jp/rss/customerreviews/id="+str(AppStoreID)+"/json"
    url_en_comment_num = "https://itunes.apple.com/rss/customerreviews/id="+str(AppStoreID)+"/json"
    dat_csv_file = "/home/pi/project/myAppReviewChecker/dat.csv"
```

```python:do.py
## 実行ファイル
import download
import csvFile
## アプリのレビュー数を取得し、通知する
##日本、アメリカAppStoreレビュー数を取得する
if __name__ == "__main__":
    dl = download.Downlaod()
    ## レビュー数を取得
    dl.getReviewCountAll()  
    ## レビューコメントの数を取得する
    dl.getReviewCommentCountAll()
    ## dat.csvで前回の記録と比較しなにか違えば追記を行う
    cf = csvFile.CsvFile()
    cf.loadRecord()
    if dl.reviewCountJP != cf.reviewCountJP or dl.reviewCountUS != cf.reviewCountUS or dl.reviewCommentCountJP != cf.reviewCommentCountJP or dl.reviewCommentCountUS != cf.reviewCommentCountUS:
        cf.saveNewRecord(dl.reviewCountJP,dl.reviewCountUS,dl.reviewCommentCountJP,dl.reviewCommentCountUS)
```

```python:download.py
import const
import requests
import json
from collections import OrderedDict
import pprint

class Downlaod:
    ## --------------------------------------------------------------------
    reviewCountJP = 0
    reviewCountUS = 0
    reviewCommentCountJP = 0
    reviewCommentCountUS = 0
    ## --------------------------------------------------------------------
    def __init__(self):
        pass

    def getReviewCountAll(self):
        self.reviewCountJP = self.getReviewCount(const.const.url_jp_app_json)
        self.reviewCountUS = self.getReviewCount(const.const.url_us_app_json)

    def getReviewCount(self,url):
        r = requests.get(url)
        #print(r.content)
        d = json.loads(r.text)
        pprint.pprint(d['results'][0]['userRatingCount'], width=40)
        return d['results'][0]['userRatingCount']

    def getReviewCommentCountAll(self):
        self.reviewCommentCountJP = self.getReviewCommentCount(const.const.url_jp_comment_num)
        self.reviewCommentCountUS = self.getReviewCommentCount(const.const.url_en_comment_num)

    def getReviewCommentCount(self,url):
        r = requests.get(url)
        d = json.loads(r.text)
        count = len(d['feed']['entry']) 
        print(count)
        return count

#テスト用にmainを書いておく
if __name__ == "__main__":
    dl = Downlaod()
    dl.getReviewCountAll()
    dl.getReviewCommentCountAll()
    #print("done")
```

```python:csvFile.py
## dat.csvファイル出力用
import const
from csv import reader
import datetime

class CsvFile:
    ## --------------------------------------------------------------------
    newRow = None
    timeStamp = None
    reviewCountJP = 0
    reviewCountUS = 0
    reviewCommentCountJP = 0
    reviewCommentCountUS = 0
    ## --------------------------------------------------------------------
    def __init__(self):
        pass

    def loadRecord(self):
        with open(const.const.dat_csv_file, "r") as f:
            data = reader(f)
            for row in data:
                self.newRow = row
        print(self.newRow)
        self.timeStamp = row[0]
        self.reviewCountJP = int(row[1])
        self.reviewCountUS = int(row[2])
        self.reviewCommentCountJP = int(row[3])
        self.reviewCommentCountUS = int(row[4])
    
    def saveNewRecord(self,reviewCountJP,reviewCountUS,reviewCommentCountJP,reviewCommentCountUS):
        self.reviewCountJP = reviewCountJP
        self.reviewCountUS = reviewCountUS
        self.reviewCommentCountJP = reviewCommentCountJP
        self.reviewCommentCountUS = reviewCommentCountUS
        self.writeNewRecord()
        pass    

    def writeNewRecord(self):
        dt_now = datetime.datetime.now()
        self.timeStamp = dt_now.strftime('%Y%m%d-%H:%M:%S')
        newDat = str(self.timeStamp)+","+str(self.reviewCountJP)+","+str(self.reviewCountUS)+","+str(self.reviewCommentCountJP)+","+str(self.reviewCommentCountUS)
        #newDat = str(self.timeStamp)+","+self.reviewCountJP+","+self.reviewCountUS+","+self.reviewCommentCountJP+","+self.reviewCommentCountUS
        with open(const.const.dat_csv_file, "a") as f:
            data = reader(f)
            print(newDat, file=f)

if __name__ == "__main__":
    cf = CsvFile()
    cf.loadRecord()
    cf.writeNewRecord()
    pass
```

##cron設定
crontab内で以下のように設定し毎日22時に集計する

```
0 22 * * * python3 /home/pi/project/myAppReviewChecker/do.py
```