Open data (csv) diffusé depuis la préfecture de Gifu, ・ Grattez régulièrement avec des actions github -Output un fichier json comme un simple tableau de dictionnaire sans modification ・ S'il y a une différence, appuyez sur la branche gh-pages ・ Vous pouvez accéder au fichier json directement sur les pages github C'est un programme.
Ce programme a été développé pour le développement du site Antivirus Corona de la préfecture de Gifu. Bien qu'il soit publié dans d'autres cas, le traitement est inclus dans la sortie csv-> json, et il est De nombreuses corrections ont été nécessaires pour référence. Par conséquent, dans ce programme, le traitement est réduit au minimum et les données csv d'origine peuvent être sorties telles quelles dans un format qui facilite le développement pour d'autres développeurs.
Product Github https://github.com/CODE-for-GIFU/covid19-scraping
http://code-for-gifu.github.io/covid19-scraping/patients.json http://code-for-gifu.github.io/covid19-scraping/testcount.json http://code-for-gifu.github.io/covid19-scraping/callcenter.json http://code-for-gifu.github.io/covid19-scraping/advicecenter.json
Données ouvertes de la préfecture de Gifu https://data.gifu-opendata.pref.gifu.lg.jp/dataset/c11223-001
how to use
.github / workflows / main.yml
Ou.github / workflows / main.yml
main.yml
on:
schedule:
- cron: "*/10 * * * *”
gh-pages branch
dans Settings
-> Github Pages
-> Source
.Pour plus de détails, reportez-vous au document officiel de l'action github. https://help.github.com/ja/actions
pip install -r requirements.txt
python3 main.py
Un fichier json sera généré dans le dossier / data
.
python
main.py
os.makedirs('./data', exist_ok=True)
for remotes in REMOTE_SOURCES:
data = import_csv_from(remotes['url'])
dumps_json(remotes['jsonname'], data)
settings.py
#Définition des ressources externes
REMOTE_SOURCES = [
{
'url': 'https://opendata-source.com/source1.csv',
'jsonname': 'source1.json',
},
{
'url': 'https://opendata-source.com/source2.csv',
'jsonname': 'source2.json',
},
{
'url': 'https://opendata-source.com/source3.csv',
'jsonname': 'source3.json',
},
{
'url': 'https://opendata-source.com/source4.csv',
'jsonname': 'source4.json',
}
]
json_name
: nom du fichier json de sortiemain.py
def import_csv_from(csvurl):
request_file = urllib.request.urlopen(csvurl)
if not request_file.getcode() == 200:
return
f = decode_csv(request_file.read())
filename = os.path.splitext(os.path.basename(csvurl))[0]
datas = csvstr_to_dicts(f)
timestamp = (request_file.getheader('Last-Modified'))
return {
'data': datas,
'last_update': dateutil.parser.parse(timestamp).astimezone(JST).isoformat()
}
data
: Stocke les données décodées elles-mêmes de csv.last_update
: Récupère la dernière date de modification du fichier.main.py
def decode_csv(csv_data):
print('csv decoding')
for codec in CODECS:
try:
csv_str = csv_data.decode(codec)
print('ok:' + codec)
return csv_str
except:
print('ng:' + codec)
continue
print('Appropriate codec is not found.')
main.py
def csvstr_to_dicts(csvstr):
datas = []
rows = [row for row in csv.reader(csvstr.splitlines())]
header = rows[0]
for i in range(len(header)):
for j in range(len(UNUSE_CHARACTER)):
header[i] = header[i].replace(UNUSE_CHARACTER[j], '')
maindatas = rows[1:]
for d in maindatas:
#Ignorer les lignes vides
if d == []:
continue
data = {}
for i in range(len(header)):
data[header[i]] = d[i]
datas.append(data)
return datas
main.py
def dumps_json(file_name: str, json_data: Dict):
with codecs.open("./data/" + file_name, "w", "utf-8") as f:
f.write(json.dumps(json_data, ensure_ascii=False,
indent=4, separators=(',', ': ')))
Github Action Il est construit avec un fichier yml.
main.yml
on:
schedule:
- cron: "*/10 * * * *”
main.yml
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
uses: actions/setup-python@v1
with:
python-version: 3.8
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run script
run: |
python main.py
requirements.txt
et installez-le automatiquementmain.yml
- name: deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./data
publish_branch: gh-pages
secrets.GITHUB_TOKEN
vous représentepublish_dir
est le paramètre du dossier de sortie. Spécifiez le dossier data
pour sortir le fichier json.publish_branch
spécifie la branche à pousserHokkaido: script Python pour le scraping --covid19hokkaido_scraping https://github.com/Kanahiro/covid19hokkaido_scraping/blob/master/main.py
Recommended Posts