View Single Post
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))