Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  16 4943
Hei!

Er lei av å sjekke hbonordic.com om fargo, vikings eller Game of Thrones, etc. har komt ut, så tenkte det hadde verdt greit å hente ut ul elementet som inneholder alle episodene, *link*, og sjekke om det har kommet ei ny episode.

Men eg klarer ikkje å hente ut elementet ettersom hbonordic.com har origin policy, så eg lurte på om nokon andre hadde ein ide? ^^


edit: her er error outputten
XMLHttpRequest cannot load http://hbonordic.com/series/-/-/fargo-1. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.
Vis hele sitatet...
Sist endret av Fyllingz; 1. mai 2014 kl. 21:15.
Det er ikke et alternativ å følge dem på Facebook, Twitter, eller å abonnere på nyhetsbrev på e-post?
Bruk curl til å grabbe siden du er ute etter, legg til -H og sett nødvendige headers for å omgå begrensningen, parse outputen du får tilbake i selvvalgt språk

greit forklart her: http://stackoverflow.com/questions/3...gh-a-curl-call
Sist endret av liasis; 1. mai 2014 kl. 21:32.
Hvorfor ikke bruke et nettsted som allerede har den informasjonen, til og med i et eget API

http://thetvdb.com/wiki/index.php?title=Programmers_API
Sitat av Ueland Vis innlegg
Hvorfor ikke bruke et nettsted som allerede har den informasjonen, til og med i et eget API

http://thetvdb.com/wiki/index.php?title=Programmers_API
Vis hele sitatet...
Fordi eg har berre hbonordic abbonement, og episodene kommer ut 24 timer innen releasen. Eg kan jo berre vente ein ekstra dag, men har lyst å lage eit lite prosjekt nå!

Sitat av Grimdoc Vis innlegg
Det er ikke et alternativ å følge dem på Facebook, Twitter, eller å abonnere på nyhetsbrev på e-post?
Vis hele sitatet...
Nope.
<?php getUserTitle(); ?>
MrMrtn's Avatar
Jeg tenker bare høyt her, men kan du ikke laget et script som laster ned siden, genererer en MD5-sum av innholdet, og sjekker det mot tidligere genererte MD5-summer? Er summene ulike har sidens innhold endret seg, er summene like har det ikke kommet noe nytt.
Denne løsningen fungerer åpenbart ikke hvis du vil parse litt info etc, men er vel veldig enkelt å gjøre hvis man bare vil hacke det fort sammen i Python etc.
Sist endret av MrMrtn; 2. mai 2014 kl. 15:44.
Sitat av MrMrtn Vis innlegg
Jeg tenker bare høyt her, men kan du ikke laget et script som laster ned siden, genererer en MD5-sum av innholdet, og sjekker det mot tidligere genererte MD5-summer? Er summene ulike har sidens innhold endret seg, er summene like har det ikke kommet noe nytt.
Denne løsningen fungerer åpenbart ikke hvis du vil parse litt info etc, men er vel veldig enkelt å gjøre hvis man bare vil hacke det fort sammen i Python etc.
Vis hele sitatet...
0.o genialt!

Da kan den sjekke om det har skjedd ein oppdatering på siden, og isåfall parse litt info om det er tilfelle.. TAKKER!

Men eg fekk hentet ut heile siden nå, strever litt med å hente ut ul elementet..

klarte å få ut alt som var på siden:


og gjor om teksten til eit dom element:

Kode

function convert_string_to_dom(str) {
    var xmlString = str
        , parser = new DOMParser()
        , doc = parser.parseFromString(xmlString, "text/xml");

    return doc;
}
Jobber berre med å hente ut ul elementet så er resten ganske ok
Sist endret av Fyllingz; 2. mai 2014 kl. 16:11.
Kan skrive noe raskt som parser ut info,da dette er et tema jeg kan godt.
Kan ta det med Xpath som fungere i parsere i flere språk,jeg bruker da Python og lxml.
Tar ut både serie navn og serie info(som ligger i href= referanse)

Kode

from lxml.html import parse

html = parse('http://hbonordic.com/series/-/-/fargo-1')
serie_name = html.xpath('//span[@class="episode_bar_item text_hbo_blue hoverable left width_65_75_70 pointer aired"]/text()')
serie_info = html.xpath('//div[@class="subview"]/div/ul/li/div/a/@href')

print '#---#'.join(serie_name)
print '--------------'
print '#---#'.join(serie_info)
Output:

Kode

 A Muddy Road #---# The Rooster Prince #---# The Crocodile´s Dilemma 
--------------
 /series/-/-/fargo-1/seasons/1/3-a-muddy-road #---# /series/-/-/fargo-1/seasons/1/2-the-rooster-prince #---# /series/-/-/fargo-1/seasons/1/1-the-crocolile-s-dilemma
Og må selvfølgelig fungere for alle serier.
Test:
html = parse('http://hbonordic.com/series/-/-/game-of-thrones/seasons/4/4-episode-352')
Output:

HTML-kode

 Oathkeeper #---# Breaker of Chains #---# The Lion and the Rose #---# Two Swords 
--------------
 /series/-/-/game-of-thrones/seasons/4/4-episode-352 #---# /series/-/-/game-of-thrones/seasons/4/3-episode-351 #---# /series/-/-/game-of-thrones/seasons/4/2-episode-349 #---# /series/-/-/game-of-thrones/seasons/4/1-episode-350
Når man har parsert ut info er det rimelig greit og skrive noe som sier ifra om forandringer.
Kunne nok ha skrevet noe alla det @MrMrtn forslår for kun og fange opp forandring.
Nå har du vel fått noen idèer om løsninger
Sitat av MrMrtn Vis innlegg
Jeg tenker bare høyt her, men kan du ikke laget et script som laster ned siden, genererer en MD5-sum av innholdet, og sjekker det mot tidligere genererte MD5-summer? Er summene ulike har sidens innhold endret seg, er summene like har det ikke kommet noe nytt.
Denne løsningen fungerer åpenbart ikke hvis du vil parse litt info etc, men er vel veldig enkelt å gjøre hvis man bare vil hacke det fort sammen i Python etc.
Vis hele sitatet...
tester ut dette nå.. og det virker som eg må parse ut info før eg kan generere md5 summer..

Ser at linkene deires innehalder automatisk genererte verdier, så md5 sum av heile siden går ikkje :/
Hva med md5 sum av den enkelte siden du lenket til?
Sitat av Jozocircle Vis innlegg
Hva med md5 sum av den enkelte siden du lenket til?
Vis hele sitatet...
kvar eineste side inneholder javascript som har ein random generert id bakom berre for å passe på at det ikkje blir brukt ein cachet versjonen av skriptet og at alt er up to date.

Derav kan eg ikkje berre ta md5 sum siden, men eg må få ut det bestemte innhaldet og ta sum av det.

Skal ta ein titt på parsing i dag.
Jeg foretrekker også Python, og man kan også bruke BeautifulSoup til dette:

Kode

import urllib2
from bs4 import BeautifulSoup

url = 'http://hbonordic.com/series/-/-/fargo-1'
soup = BeautifulSoup(urllib2.urlopen(url))
div = soup.find('div', class_='row')
print 'Latest episode: {}'.format(int(div.li.div.a.span.text))
Output:

Kode

Latest episode: 3
Sist endret av steili; 3. mai 2014 kl. 17:32.
og man kan også bruke BeautifulSoup til dette:
Vis hele sitatet...
BeautifulSoup er bra,har vært en favoritt omtrent siden den kom ut.

fant denne:
Vis hele sitatet...
Ja Simple HTML DOM Parser er en grei parser for PHP,kan også tolke XPath.
Da gjenstår det vel bare og lære dette

@steinarlima sin metode med og bare ta ut tall for siste episode kan fungere bra.
Her en med XPath.

Kode

from lxml.html import parse

html = parse('http://hbonordic.com/series/-/-/fargo-1')
latest_episode = html.xpath('//span[@class="episode_bar_item left width_30px margin_left_1 pointer aired"]/text()')
Test:

Kode

>>> latest_episode
[' 3 ', ' 2 ', ' 1 ']
>>> print latest_episode[0].strip()
3
Test med 3 serier.

Kode

from lxml.html import parse

url_lst =\
['http://hbonordic.com/series/-/-/fargo-1',
 'http://hbonordic.com/series/-/-/game-of-thrones/seasons/4/4-episode-352',
 'http://hbonordic.com/series/-/-/continuum/seasons/3/5-episode-368']

for serie in url_lst:
    html = parse(serie)
    latest_episode = html.xpath('//span[@class="episode_bar_item left width_30px margin_left_1 pointer aired"]/text()')
    print 'latest_episode: {} --> {}'.format(latest_episode[0].strip(), serie)
Output:

Kode

latest_episode: 3 --> http://hbonordic.com/series/-/-/fargo-1
latest_episode: 4 --> http://hbonordic.com/series/-/-/game-of-thrones/seasons/4/4-episode-352
latest_episode: 5 --> http://hbonordic.com/series/-/-/continuum/seasons/3/5-episode-368
Dere skriver deres eiget lxml.html eller?

Finner det ikkje på nettet :P
Sitat av Fyllingz Vis innlegg
Dere skriver deres eiget lxml.html eller?

Finner det ikkje på nettet :P
Vis hele sitatet...
De bruker nok dette: http://lxml.de/
Takker for svar!
Vil sjekke ut lxml seinere, var ganske fint

Kom nettopp tilbake frå øvelse så var litt inaktiv, hehe.
Men her er vertfall koden:

Kode

<?php

include'../file_get_html.php';
//use cURL to gether the content from a site
if(isset($_GET['url']) && !empty($_GET['url'])){  
    $url = $_GET['url'];
    $html = file_get_html($url);
    
    //link
    $link_host = 'http://'.parse_url($url)['host'];
    $link_location = trim($html->find('.episode')['0']->find('a')['0']->getAttribute('href'));
    
    //number
    $num = $html->find('.episode')['0']->find('span')['0']->plaintext;
    
    //title
    $title = $html->find('.episode')['0']->find('span')['1']->plaintext;
    
    echo '<pre>';
    $arr = [
        'link' => $link_host.$link_location,
        'number' => $num,
        'title' => $title
    ];
    
    //trim and fix the array
    foreach($arr as $key => $val)
        $arr[$key] = (string)htmlentities(trim($val));
    
    
    print_r($arr);
}else{
    echo 'ERROR';
}
exit;
Respons:

Kode

Array
(
    [link] => http://hbonordic.com/series/-/-/vikings/seasons/2/10-episode-330
    [number] => 10
    [title] => The Lord's Prayer
)

Er litt siden eg dreiv med php så føler eg har overdrevet litt, men det fikser eg straks!