Offene Daten (CSV) aus der Präfektur Gifu, ・ Regelmäßiges Schaben mit Github-Aktionen
Dieses Programm wurde für die Entwicklung der Corona Antivirus-Site der Präfektur Gifu entwickelt. Obwohl es in anderen Fällen veröffentlicht wird, ist die Verarbeitung in der csv-> json-Ausgabe enthalten, und das ist es auch Viele Korrekturen wurden als Referenz benötigt. Daher wird in diesem Programm die Verarbeitung auf ein Minimum beschränkt, und die ursprünglichen CSV-Daten können in einem Format ausgegeben werden, das anderen Entwicklern die Entwicklung erleichtert.
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
Open Data der Präfektur Gifu https://data.gifu-opendata.pref.gifu.lg.jp/dataset/c11223-001
how to use
.github / workflows / main.yml
Oder.github / workflows / main.yml
ausmain.yml
on:
schedule:
- cron: "*/10 * * * *”
Einzelheiten finden Sie im offiziellen Dokument der Github-Aktion. https://help.github.com/ja/actions
pip install -r requirements.txt
python3 main.py
Eine json-Datei wird im Ordner / data
generiert.
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
#Externe Ressourcendefinition
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',
}
]
url
: Fügen Sie den Referenz-CSV-Link einjson_name
: Gibt den Namen der json-Datei ausmain.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
: Speichert die decodierten Daten selbst von csv.last_update
: Ruft das Datum der letzten Änderung der Datei ab.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:
#Leerzeilen überspringen
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 Es wird mit einer yml-Datei erstellt.
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
main.yml
- name: deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./data
publish_branch: gh-pages
Geheimnisse.GITHUB_TOKEN
repräsentiert dichPublish_dir
ist die Einstellung des Ausgabeordners. Geben Sie den Ordner "data" an, um die JSON-Datei auszugeben.Publish_branch
gibt den zu pusenden Zweig anHokkaido: Python-Skript zum Scraping --covid19hokkaido_scraping https://github.com/Kanahiro/covid19hokkaido_scraping/blob/master/main.py
Recommended Posts