Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [TV] Program - znowu
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
tiraeth
Kolejna odsłona. Funkcja zwraca tablicę z programem na dany dzień, konkretny przedział czasu i odpowiedni kanał - wszystko przekazywane za pomocą parametrów funkcji. Po odebraniu takiej tablicy możemy zrobić z nią wszystko smile.gif Dodatkowo zwracany jest (zazwyczaj) jeden Hit Dnia, u którego jeden z kluczy w tablicy to hit=true!

  1. <?php
  2. /************************************************************************
  3.  *
  4.  * ********************************
  5.  *
  6.  *  PROGRAM TELEWIZYJNY
  7.  *
  8.  ************************************************************************/
  9.  
  10. function programTV($tv_stacja = false, $date = false, $from_to = false)
  11. {
  12.  $data = ($date) ? $date : date('Y-m-d');
  13.  $stacja = ($tv_stacja) ? $tv_stacja : 17;
  14.  $titles = array('Kawa czy herbata?', 'Przyroda Ameryki'); # ITD...
  15.  
  16.  if(!eregi('..', $from_to))
  17. $from_to = false;
  18.  
  19.  define('TV_DATA', $data); # Domyslna data wyswietlania
  20.  define('TV_STACJA_ID', $stacja); # Numer stacji
  21.  define('FROM_TO', $from_to); # Zakres godziny przy wyswietlaniu
  22. # OD..DO, np. 12:00..14:00
  23. # lub "false" aby caly dzien wyswietlic
  24.  
  25.  $url = 'http://tv.wp.pl/index_druk.html?T[date]='.TV_DATA.'&T[time]=0&T[category]=ALL&T[station]='.TV_STACJA_ID.'&T[page]=1&T[ctime]=0';
  26.  
  27.  $handle = implode("", file($url));
  28.  
  29.  if(preg_match_all('#<b class="ng">(.*?)</b>#is', $handle, $nazwa))
  30.  {
  31. define('TV_STACJA', $nazwa[1][0]);
  32.  
  33. if(preg_match_all('#<td class="drukowalne" (.*?)</td>#is', $handle, $result))
  34. {
  35.  $res = $result[1];
  36.  $i=0; $a=0; $b=0;
  37.  
  38.  while($b<count($res)/2)
  39.  {
  40. $tmp = '<'.$res[$i];
  41.  
  42. if(eregi('hit.gif', $tmp) && $ishit == false) {
  43.  $hit = true;
  44.  $ishit = true;
  45. }
  46. else
  47.  $hit = false;
  48.  
  49. $date = strip_tags($tmp, '<br>');
  50. $tmp = '<'.$res[$i+1];
  51. $title = strip_tags($tmp, '<br>');
  52. $desc = '';
  53.  
  54. if(eregi('<br>', $title))
  55. {
  56.  $list = explode('<br>', $title);
  57.  $title = $list[0];
  58.  
  59.  for($j=1; $j<count($list); $j++)
  60.  {
  61.  $desc.= $list[$j].'<br>';
  62.  }
  63.  $desc = substr($desc, 0, -4);
  64.  if(strlen($desc) < 25) $desc = '  ';
  65. }
  66.  
  67. if(count($titles) > 0)
  68. {
  69.  foreach($titles as $t)
  70.  {
  71. if(eregi($t, $title))
  72.  $title = $t;
  73.  }
  74. }
  75.  
  76. $time = strtotime(TV_DATA.' '.$date);
  77. if(date('H', $time) <= 04 && date('i', $time) <= 40)
  78.  $time+= 3600*24;
  79.  
  80. $from = 0; $to = 0;
  81. if(ereg('..', FROM_TO))
  82. {
  83.  list($from, $to) = explode('..', FROM_TO);
  84.  
  85.  $from = strtotime(TV_DATA.' '.$from);
  86.  $to = strtotime(TV_DATA.' '.$to);
  87.  
  88. }
  89.  
  90. if(($from <> 0 AND $from <= $time AND $to <> 0 AND $to >= $time) OR FROM_TO == false)
  91. {
  92.  $Tab[$a]['time'] = $time;
  93.  $Tab[$a]['title'] = $title;
  94.  $Tab[$a]['desc'] = $desc;
  95.  
  96.  if($hit == true)
  97. $Tab[$a]['hit'] = true;
  98.  else
  99. $Tab[$a]['hit'] = false;
  100.  
  101.  $a++;
  102. }
  103. $i+=2;
  104. $b++;
  105.  }
  106. }
  107.  }
  108.  
  109.  return $Tab;
  110. }
  111. ?>


Sposób użycia
  1. <?php
  2. include('programTV.php'); # wczytujemy funkcję
  3.  
  4. $def = programTV(); # Odczytujemy na dzisiaj domyslnie kanal ID=17
  5. $dzisiaj = programTV(1); # Odczytujemy kanał o ID=1 na dzisiaj - cały dzień
  6. $rano = programTV(1, false, '03:00..12:00'); # Kanał ID=1, na dzisiaj, od 03:00 do 12:00
  7. $jutro = programTV(false, '2005-12-09', 18:00..24:00); # Na 9 grudnia, kanał domyślny, od 18:00 do 24:00
  8. ?>
NuLL
Ja ladnie podziekuje za skrypt smile.gif Co prawda na stronie mi sie nie przyda ale przynajmniej wlaczajac localhosta mam co daja w TVN Turbo dzis i jutro biggrin.gif
tiraeth
A nie ma za co winksmiley.jpg Poprostu uważam, że taki bajer jest zawsze przydatny, a nie każdemu chce się czekać aż się obrazki/reklamy załadują w innym serwisie smile.gif
vihoo
Ja bym zmienił:
  1. <?php
  2.  
  3. $time = strtotime(TV_DATA.' '.$date);
  4. if(date('H', $time) <= 03 && date('H', $time) <= 30)
  5.  $time+= 3600*24;
  6.  
  7. ?>

na:
  1. <?php
  2.  
  3. $time = strtotime(TV_DATA.' '.$date);
  4. if(date('H', $time) <= 04 && date('H', $time) <= 30)
  5.  $time+= 3600*24;
  6.  
  7. ?>

bo się troszkę znaczniki czasu krzaczą.
A tu:
  1. <?php
  2.  
  3. foreach($titles as $t)
  4. {
  5.  if(eregi($t, $title))
  6. $title = $t;
  7. }
  8.  
  9. ?>

wywala mi błędy - chyba z powodu braku zmiennej $titles. Po wywaleni pętelki chodzi poprawnie.
tiraeth
  1. <?php
  2. foreach($titles as $t)
  3. {
  4.  if(eregi($t, $title))
  5. $title = $t;
  6. }
  7. ?>

Odpowiada za zmianę nazwy programu, gdy w nazwie umieszczony jest opis odcinka, np. "Kawa i herbata Coś tam jacyś goście" zamieni na "Kawa i herbata" gdy na początku funkcji w zadeklarowanej tablicy $titles znajdzie się ten tytuł smile.gif

Odnośnie czasu - i tak jest błąd, nie sprawdza minut, literówka smile.gif

Poprawiłem kod!! Poprawiłem czas...

Kurde, teraz nic nie rozumiem z połowy tego kodu smile.gif Trzeba będzie go okomentować smile.gif
szygmon
  1. Parse error: syntax error, unexpected ':' in /home/.../public_html/administration/custom_pages.php(74) : eval()'d code on line 7


taki bł mi wyskakuje. O co chodzi?
phpion
smile.gif również dziękuję za udostępnienie źródełka i podobnie jak NuLL odpalę sobie na localhoście.
Heh, mam tylko jedną małą uwagę odnośnie nazewnictwa zmiennej $ishit - różnie to można zinterpretować winksmiley.jpg hehehe
roobik
...a mi nie działa, ponieważ
Cytat
Parse error: syntax error, unexpected T_STRING in /......../_public_html/program.php on line 30

więc poszukałem i myślałem, że znalzłem, bo w linii 30 jest :
  1. <?php
  2. if(preg_match_all('#<b class="ng">(.*?)</b>#is', $handle, $nazwa))
  3. ?>

Wyrzuciłem "" (również niżej, gdzie jest "drukowanie"
czyli mam
  1. <?php
  2. if(preg_match_all('#<b class=ng>(.*?)</b>#is', $handle, $nazwa))
  3. ?>

ale dalej mam w 30 linii błąd...
szygmon
niech ktoś poprawi ten kod, żeby działał poprawnie
roobik
Przydałoby się... Nie jestem zbyt mocny w php. Ale wiele rozwiązań już testowałem - zawsze z tym samym błędem... Pomóżcie proszę...
Koshin
pierwotną linie 28 należy zmienić na:

  1. <?php
  2. $handle = implode('\"', file($url));
  3. ?>
roobik
sad.gif
po zmianie: jest tylko biała strona... nic sięjuż nie pokazuje... nawet błędy sad.gif
bim2
gadasz głupoty. Mi działa dry.gif
sagittariuspl
Cytat(roobik @ 9.08.2007, 22:34:13 ) *
sad.gif
po zmianie: jest tylko biała strona... nic sięjuż nie pokazuje... nawet błędy sad.gif
spróbj jeszcze tak:
  1. <?php
  2. print_r($dzisiaj);
  3. ?>
trzeba sobie jeszcze te dane przetworzyć jak widzę biggrin.gif
bim2
  1. <?php
  2. $dzisiaj = programTV(1, false, date("H:i", (time()-2*3600)).'..23:59');
  3. foreach($dzisiaj AS $iKey => $sValue)
  4. {
  5. if($sValue['time']<time() AND $dzisiaj[$iKey+1]['time']>time())
  6. echo '<b>- '.$sValue['title'].'</b> : '.date("H:i", $sValue['time']).':<br />';
  7. else
  8. echo '- '.$sValue['title'].' : '.date("H:i", $sValue['time']).':<br />';
  9. }
  10. ?>

Wyswietla też któy program oglądamy winksmiley.jpg
Taifun
jak zrobić żeby pokazywał same seriale? tongue.gif Serio pytam
bim2
Zrób tablicę z nazwami seriali i później filtruj kanały pod tym kątem. :roll2:
sokolam
Pomoze mi ktos z tym lub podesle gotowy skrypt na tpspeed@wp.pl questionmark.gif

Mecze sie no i nie moge tego odpalic sad.gif
roobik
Również bym prosił o wskazówkę... Ewentualnie skrypt
z_line(at)wp.pl
bim2
sciana.gif sciana.gif sciana.gif
  1. <?php
  2. $dzisiaj = programTV(17, false, date("H:i", (time()-2*3600)).'..23:59');
  3. foreach($dzisiaj AS $iKey => $sValue)
  4. {
  5. if($sValue['time']<time() AND $dzisiaj[$iKey+1]['time']>time())
  6. echo '<b>- '.$sValue['title'].'</b> : '.date("H:i", $sValue['time']).':<br />';
  7. else
  8. echo '- '.$sValue['title'].' : '.date("H:i", $sValue['time']).':<br />';
  9. }
  10. ?>

Funkcje podał juz tirateh... W razie problemów już na PW. Nie róbmy śmietnika worriedsmiley.gif

EDIT: Cały skrypt
http://phpfi.com/257920
bim2
Przepraszam za post pod postem, ale własnie zaliczyłem rotfla. Postanowiłem sobie wyświetlać dane z 2 kanalow (TVN i TVN7). Jak się okazało jest to nie możliwe blinksmiley.gif

Tiraeth przetrzymuje id stacji w stałej i jak sama nazwa wskazuje i manual nie może być zmieniania. sadsmiley02.gif
Cytat
Stałe nie mogą być redefiniowane lub undefined po tym jak raz zostały zdefiniowane;


Aby naprawić ten niemiły bug wystarczy zmienić
  1. <?php
  2. $url = 'http://tv.wp.pl/index_druk.html?T[date]='.TV_DATA.'&T[time]=0&T[category]=ALL&T[station]='.TV_STACJA_ID.'&T[page]=1&T[ctime]=0';
  3. ?>

na
  1. <?php
  2. $url = 'http://tv.wp.pl/index_druk.html?T[date]='.TV_DATA.'&T[time]=0&T[category]=ALL&T[station]='.$stacja.'&T[page]=1&T[ctime]=0';
  3. ?>


Mam nadzieje, że pomogłem smile.gif
szygmon
Parse error: parse error in c:\usr\krasnal\www\szygmon\index.php on line 7
maniek00
Pytanie natury prawnej.

Czy pobieranie programu tv w wp.pl i wyświetlanie na stronie jest legalne ?

A jeżeli nie, to czy można w jakiś sposób udowodnic komus ze
1. pobiera ten program z wp.pl
2. wyswietla na swojej stronie to co pobral.

No bo przeciez mozna powiedziec, ze program pobrany byl z telegazety smile.gif
zur887
Program był już kiedyś dostępny pod adresem miastotv.pl ale tiraeth musiał go zamknąć bo firma A plus C (dostarcza informacje o programie TV chyba wszystkim portalom w Polsce, na pewno wp.pl i interia.pl) zażądała od niego 9 tys. zł miesięcznie za dostarczane informacje.

Poza tym wp też niechętnie dzieli się informacjami z innymi.

Powiedzieć zawsze można, ludzie ciągle jakieś głupoty gadają...
Mefi
Super Skrypcik mam go na sowiej stronie domowej nawet zwierzyła mi sie oglądalność strony biggrin.gif
roobik
Po dłuższej nieco przerwie ponownie zajrzałem do tematu. Poprawiłem wszystko to, o czym pisałem wcześniej. Działa smile.gif Jednak jest mały "niedosyt". Otóż program wyświetlany jest do godz. 23:59, a jak wszyscy wiemy, "zakończenie programu" nie kończy się wraz z godziną 23:59 (minimalny czas zakończenia to okolice godziny 04:00 dnia następnego)... I tu jest problem - mimo, ze dla skryptu jest to "program na jutro", to tak naprawdę jest to jeszcze "program na dzisiaj"... Chyba nie namieszałem - myślę, ze wiecie o co chodzi...

//edit
Czy jest możliwość (a jesli tak, to proszę o radę "how_to") by skrypt wyświetlał oprócz programu na "dzisiaj" także program wybranych stacji na "jutro"?
Bardzo proszę o odp...
djalbert
No i sie zepsulo... wp.pl przebudowało swój serwis z programem TV i skrypt przestał działać. Czy podejmie się ktoś przeróbki ?smile.gif.
q840
No ja również korzystałem z tego skryptu, ma ktoś pomysł na poprawne działanie tego skryptu po zmianach?
djalbert
Albo może ktoś zna jakieś inne źrodło programu TV, z którego można zassać go na własną stronę?
r33
Witam. Ja naprawdę potrzebują pomocy z tym skryptem... Ma ktoś pomysł jak to naprawić? Będę bardzo wdzięczny za pomoc...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.