Stemmer dette Provo det surres litt med "mediaid",
og data-nrk-id som man trenger for og få riktig info utifra API'et.
Som Hellowlol har postet før så finner man (data-nrk-id) i Embed-kode linken.
Men man må jo parse ut denne info,
ellers må man jo be brukere og finne denne koden og det holder ikke
Nrk skole bruker nå
React,og det er derfor litt knotete og parse dette.
Her et par tips,jeg bruker Selenium/PhantomJs en del til parsing av sider med JavaScripts.
Kode
from bs4 import BeautifulSoup
from selenium import webdriver
import time, re
import requests
driver = webdriver.PhantomJS()
driver.set_window_size(1120, 550)
url = 'https://www.nrk.no/skole/?page=objectives&subject=naturfag&objective=K15027&mediaId=21118'
driver.get(url)
time.sleep(2)
source = driver.page_source
#---|Get id
temp = re.search(r'data-nrk-id="(.*?)"', source)
data_nrk_id = temp.group(1)
print(data_nrk_id) #215372 og mediaId er 21118
#--|Api
#https://www.nrk.no/embed/PS*215372?autoplay=true
#https://v8-psapi.nrk.no/mediaelement/215372
nrk_json = requests.get('https://v8-psapi.nrk.no/mediaelement/{}'.format(data_nrk_id))
media_url = nrk_json.json()['mediaUrl']
media_url = re.sub(r'/\w/', '/i/', media_url)
print(media_url) #get manifest.fm4
Youtube-dl har faktisk oppdatert for NRK skole.
Ettersom Youtube-dl er skrevet i Python kan man ta ut kode for og parse ut info uten og laste ned(download=False).
Kode
import youtube_dl
import re
ydl_opts = {}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info('https://www.nrk.no/skole/?page=objectives&subject=naturfag&objective=K15027&mediaId=21118', download=False)
if 'entries' in info:
video = info['entries'][0]
media_url = re.search(r'(.*)index', video[u'url'])
print(media_url.group(1))