Voor mijn vriendin heb ik een webpagina met daarop alle dingen zie ze leuk vind en daar wou ik nou ook de televisieseries die ze tracked via TVShowTime opzetten.
Klein probleempje - voor persoonlijke dingen verlenen ze geen API-access waarvoor een key nodig is die ze zelf verstrekken, dat gaat hem dus helaas niet worden. Nou lukt het me wel om via CURL in te loggen en op de kalender pagina uit te komen maar ook hier een klein probleempje.
Blijkbaar doen ze het deel wat ik wil hebben geheel in javascript, ofwel ik heb wat meer nodig dan CURL en DomDocument. Nou lukt het me wel om het stukje javascript waar alle series en informatie daarover te extracten maar ik kan niet uitvogelen waar ze de informatie vinden voor de "My shows" (de series die je zelf kijkt) vandaan word gehaald.
Wat ik heb:
en dat werkt (met een echte username/password), maar dan krijg ik de output van alle series maar ik kan niet weervinden waar deze lijst naar een "My Shows" view wordt gemaakt. Dit vind waarschijnlijk ergens plaats in hun calendar.js maar ik kan niet achterhalen op basis waarvan. Ik heb ook gekeken of de cookies wellicht een lijst met IDs ofzoiets bevat maar dat lijkt niet het geval te zijn.
Klein probleempje - voor persoonlijke dingen verlenen ze geen API-access waarvoor een key nodig is die ze zelf verstrekken, dat gaat hem dus helaas niet worden. Nou lukt het me wel om via CURL in te loggen en op de kalender pagina uit te komen maar ook hier een klein probleempje.
Blijkbaar doen ze het deel wat ik wil hebben geheel in javascript, ofwel ik heb wat meer nodig dan CURL en DomDocument. Nou lukt het me wel om het stukje javascript waar alle series en informatie daarover te extracten maar ik kan niet uitvogelen waar ze de informatie vinden voor de "My shows" (de series die je zelf kijkt) vandaan word gehaald.
Wat ik heb:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
| $postData = sprintf("username=%s&password=%s&redirect_path=%s", 'HARDCODED_USERNAME', 'HARDCODED_PASSWORD', 'http://www.tvshowtime.com/en/user/6937016/calendar'); $curl = curl_init('www.tvshowtime.com/signin'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); //Resolve redirects curl_setopt($curl, CURLOPT_POSTFIELDS, $postData ); $result = curl_exec($curl); /** * @param String $str HTML of tvshowtime's calendar. */ function getCalendarObject($str) { $strNew = ""; $separator = "\r\n"; $identifier = 'calendar : \''; $line = strtok($str, $separator); while ($line !== false) { if(strpos($line, $identifier)!==false) //Only care for the line with the calendar. { # do something with $line $strNew = str_replace('\\', '', $line); //Only need the array with the information so cut off the rest. $iIdentifier = strlen($identifier)+4; $strNew = substr($strNew, $iIdentifier); //Cut off $identifier $strNew = substr($strNew, 0, strrpos($strNew, ']')+1); //Don't need the stuff after } $line = strtok( $separator ); } return $strNew; } /** * Makes a definition list out of the properties of the given stdClass */ function prettyPrint(stdClass $jBit) { $dl = "<dl>"; $arrValues = get_object_vars($jBit); foreach($arrValues as $key => $value) { $dl .= '<dt style="font-weight: bold;">'.$key.'</dt>'; if($value instanceof stdClass) $dl .= prettyPrint($value); //else if(is_string($value) && strpos($value, '.jpg')>0) // $dl .= '<dd><img src="'.$value.'" /></dd>'; else $dl .= '<dd>'.print_r($value ,true).'</dd>'; } return $dl.'</dl>'; } //Find the javascript used to build up the calendar in the DOM. $document = new DOMDocument(); @$document->loadHTML($result); $scriptNodes = $document->getElementsByTagName('script'); $calendarJsNode = $scriptNodes->item(4); //4th script node is the one with the Calendar object $calendarJsNodeString = strip_tags($document->saveHTML($calendarJsNode)); //Strips off surrounding <script> tags. $strJson = getCalendarObject($calendarJsNodeString); $json = json_decode(html_entity_decode($strJson)); foreach($json as /** @VAR stdClass */ $jBit) { echo prettyPrint($jBit); echo '<hr/>'; } |
en dat werkt (met een echte username/password), maar dan krijg ik de output van alle series maar ik kan niet weervinden waar deze lijst naar een "My Shows" view wordt gemaakt. Dit vind waarschijnlijk ergens plaats in hun calendar.js maar ik kan niet achterhalen op basis waarvan. Ik heb ook gekeken of de cookies wellicht een lijst met IDs ofzoiets bevat maar dat lijkt niet het geval te zijn.
MSI GX640 - 8GB RAM, Radeon 5970, 80GB SSD