No. | Name | Erläuterung |
---|---|---|
1 | Program List API | Geben Sie Region, Service und Datum an |
2 | Program Genre API | Geben Sie Region, Genre und Datum an |
3 | Program Info API | Geben Sie die Programm-ID an |
4 | Now On Air API | Region und Service angeben |
Program List API
hat die folgende Struktur.https://api.nhk.or.jp/v2/pg/list/{area}/{service}/{date}.json?key={apikey}
Parameter | Erläuterung | Wert |
---|---|---|
area | Regions-ID(3byte) | 130:Tokio,46 andere Regionen |
service | Service-ID(2byte) | g1: NHK-Synthese,e1:E-Tele,s1:BS,s3:BSP |
date | Datum(YYYY-MM-DD-Format) | Beispiel:2020-04-07 |
apikey | API-Schlüssel(32byte) | Erhalten durch App-RegistrierungAPI-Schlüssel |
{
"list": {
"g1": [
{
"id": "2020040704706",
"event_id": "04706",
"start_time": "2020-04-07T04:02:00+09:00",
"end_time": "2020-04-07T04:30:00+09:00",
"area": {
"id": "130",
"name": "Tokio"
},
"service": {
"id": "g1",
"name": "NHK-Synthese 1",
"logo_s": {
"url": "//www.nhk.or.jp/common/img/media/gtv-100x50.png ",
"width": "100",
"height": "50"
},
"logo_m": {
"url": "//www.nhk.or.jp/common/img/media/gtv-200x100.png ",
"width": "200",
"height": "100"
},
"logo_l": {
"url": "//www.nhk.or.jp/common/img/media/gtv-200x200.png ",
"width": "200",
"height": "200"
}
},
"title": "Darwin ist da! "Infiltriere die turbulente Löwenakademie! Trainiere den König der Bestien !!"",
"subtitle": "Wachsende Löwenkinder lernen Jagdtechniken und Erziehungstechniken von Erwachsenen, die die Rolle von Lehrern in einer Herde spielen. Skrupellose Studenten werden entlassen! ?? Halten Sie sich an die turbulenten Tage des Schuldramas!",
"content": "Im ersten neuen Jahr werden wir die "Schule" von Lion vorstellen. Wachsende Löwenkinder lernen alles von erwachsenen Lehrern über die Jagd und Kindererziehung bis hin zur Abwehr von Rivalen in einer Herde. Mein Rivale Hyena war jedoch völlig irritiert, und als ich jagte, konnte ich die ganze Gestalt sehen und leicht zur Beute fliehen. Noch skrupellosere Schüler werden von der Schule entlassen! ?? Infiltrieren Sie eine turbulente Klasse, die so gut ist wie ein Schuldrama! Lied: MISIA",
"act": "[Diskussion] Mayuko Wakuda, Naoki Tatsuda, Machiko Toyoshima, Takayuki Yamada, Inori Minase",
"genres": [
"0802",
"1000"
]
},
{Unten weggelassen}
json_normalize ()
, um das json-Format in einen Datenrahmen zu konvertieren.import pandas as pd
import json
import requests
import datetime
#Legen Sie den erhaltenen API-Schlüssel fest
apikey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
# 130:Tokio
area = '130'
# g1:NHK umfassend 1,e1:E-Tele,s1:BS,s3:BSP
service = ['g1','e1','s1','s3']
#Datum (und Uhrzeit
date = datetime.date.today()
all_results = pd.DataFrame(index=None, columns=[])
for i in range(len(service)):
url = 'https://api.nhk.or.jp/v2/pg/list/{0}/{1}/{2}.json?key={3}'.format(area,service[i],date,apikey)
request_get = requests.get(url)
if request_get.status_code != 200:
print('Ich kann die Daten der NHK-Programmführer-API nicht abrufen.')
break
result = pd.json_normalize(request_get.json(), ['list',[service[i]]])
all_results = pd.concat([all_results, result])
all_results = all_results[~all_results['title'].str.contains('Broadcast-Aussetzung')]
Zusammenfassung der erfassten Daten:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 235 entries, 0 to 37
Data columns (total 22 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 id 235 non-null object
1 event_id 235 non-null object
2 start_time 235 non-null object
3 end_time 235 non-null object
4 title 235 non-null object
5 subtitle 235 non-null object
6 content 235 non-null object
7 act 235 non-null object
8 genres 235 non-null object
9 area.id 235 non-null object
10 area.name 235 non-null object
11 service.id 235 non-null object
12 service.name 235 non-null object
13 service.logo_s.url 235 non-null object
14 service.logo_s.width 235 non-null object
15 service.logo_s.height 235 non-null object
16 service.logo_m.url 235 non-null object
17 service.logo_m.width 235 non-null object
18 service.logo_m.height 235 non-null object
19 service.logo_l.url 235 non-null object
20 service.logo_l.width 235 non-null object
21 service.logo_l.height 235 non-null object
dtypes: object(22)
memory usage: 42.2+ KB
#In Datumsformat konvertieren, Sendezeit berechnen
all_results['start_time'] = pd.to_datetime(all_results['start_time'], format='%Y/%m/%d %H:%M')
all_results['end_time'] = pd.to_datetime(all_results['end_time'], format='%Y/%m/%d %H:%M')
all_results['airtime'] = all_results['end_time'] - all_results['start_time']
all_results['link'] = all_results['id']
#Erstellen von In-Page-Link-Informationen
func = lambda x: x.replace(x, f'<div id="{x}">Programmdetails</div>')
all_results['link'] = all_results['link'].apply(func)
#Zeit. Holen Sie sich Stunden und Minuten. Fügen Sie außerdem den Namen der Zeitleiste des Programmführers hinzu
tmp = pd.concat([all_results['start_time'].dt.month ,all_results['start_time'].dt.day,
all_results['start_time'].dt.hour, all_results['start_time'].dt.minute,
(all_results['start_time'].dt.day.astype(str)+all_results['start_time'].dt.strftime('%H'))], axis=1)
tmp.columns = ['month', 'day', 'hour', 'minute','time_bins']
#Kombinieren Sie die abgerufenen Daten mit der neuen Spalte
all_results = pd.concat([all_results, tmp], axis=1)
#Aggregation für Programmlisten
data = all_results.iloc[:,[23,0,1,2,3,4,5,6,7,8,9,10,11,12,22,24,25,26,27,28]]
#Erstellen eines Datenrahmens für den endgültigen Programmführer
tv_index = data.time_bins.sort_values().unique()
tv_table = pd.DataFrame(index=tv_index, columns=['H', 'g1', 'e1', 's1', 's3']).fillna('')
#Inhalt kombinieren und in Zeitzone einfügen.
cell = ''
for s in range(len(service)):
for i in range(len(tv_table.index)):
tmp = data[(data['time_bins'] == tv_table.index[i]) & (data['service.id'] == service[s])]
for c in range(len(tmp)):
cell += '[' + str(tmp['minute'].iloc[c]) + '~]'
cell += tmp['title'].iloc[c]
cell += f'<a href="#{tmp["id"].iloc[c]}">▼</a><br>'
tv_table[service[s]].iloc[i] = cell
cell = ''
#Zeitzone hinzufügen
for h in range(len(tv_index)):
tv_table['H'].iloc[h] = int(tv_index[h][-2:])
tv_table.columns = ['H', 'NHK-Synthese', 'E-Tele', 'BS', 'BSP']
detail_table = data.stack().reset_index()
detail_table.drop(columns='level_0', inplace=True)
detail_table.columns = ['Art', 'Wert']
detail_table.set_index('Art', drop=True, inplace=True)
Erstellen Sie eine HTML-Datei mit pandas'to_html`.
Definitionsinformationen der HTML-Datei
html_template = '''
<!doctype html>
<html lang="ja">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<title>Privater Programmplan</title> <!-- #1 -->
</head>
<body>
<h2> Ich habe einen Original-Programmführer mit der NHK-Programmführer-API erstellt.{date}Auflage</h2> <!-- #2 -->
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
<style type="text/css"> th {{ text-align: center; background-color: #f5f5f5}}</style>
<div class="container-fluid"> <!-- #3 -->
{table}
</div>
<div class="container-fluid"> <!-- #4 -->
{table1}
</div>
<div>Informationsbereitstellung:NHK</div> <!-- #5 -->
</body>
</html>
Die folgenden Inhalte wurden zu den Definitionsinformationen hinzugefügt.
table = tv_table.to_html(classes=['table', 'table-bordered', 'table-hover'],escape=False)
table1 = detail_table.to_html(classes=['table', 'table-bordered', 'table-hover'],escape=False)
html = html_template.format(table=table, table1=table1, date=date)
with open('g1_table_' + str(date) + '.html', 'w') as f:
f.write(html)
Klicken Sie auf ▼, um zu den detaillierten Programmdaten mit dem Link auf der Seite zu blättern.
pandas.read_json
und pandas.to_html
verwendet werden können, also war es eine großartige Übung.pandas.read_json
landete in einem hellen Eingang, also werde ich wieder nach Materialien suchen.Recommended Posts