lostyazilim
tr.link

PHP Regex Yayın Akışı

9 Mesajlar 1.356 Okunma
lstbozum
tr.link

Elysion59 Elysion59 WM Aracı Kullanıcı
  • Üyelik 02.11.2018
  • Yaş/Cinsiyet 27 / E
  • Meslek Öğrenci
  • Konum İstanbul Avrupa
  • Ad Soyad U** P**
  • Mesajlar 20
  • Beğeniler 5 / 2
  • Ticaret 0, (%0)
Merhabalar, regex bir çok alanda kullanılan bir özellik ve bunda bir kaç örnek yapmak istiyorum. Basit örnekleri regexr üzerinden yaptım şimdi de php üzerinden bir yayın sistesinin yayın akışını kendi siteme koymak istiyorum. Bunu nasıl yapabilirim? Kısa bir örnek ile yardımcı olabilir misiniz?

örnek site: https://www.showtv.com.tr/yayin-akisi

Şu şekilde başladım fakat devamını getiremedim :norespond:


$sonuc = curl_download("https://www.showtv.com.tr/yayin-akisi/");

preg_match_all('@
(.*?)
@si', $sonuc, $parcali);

$tam = "";

foreach($parcali[0] as $parca){

preg_match_all('@(.*?)(.*?)@si', $parca, $parcali2);

$tam .= " ".strip_tags($parcali2[2][0])." => ".trim(strip_tags($parcali2[3][0]))."";
}

?>
 

 

wmaraci
reklam

euthox euthox WM Aracı Kullanıcı
  • Üyelik 08.01.2020
  • Yaş/Cinsiyet 27 / E
  • Meslek Öğrenci
  • Konum Trabzon
  • Ad Soyad G** Y**
  • Mesajlar 73
  • Beğeniler 2 / 25
  • Ticaret 1, (%100)
regex yerine bence domdocument kullanın

regexsiz bu şekilde yapılabilir

$page = file_get_contents("https://www.showtv.com.tr/yayin-akisi");
$dom = new DOMDocument;
@$dom->loadHTML($page);
$xpath = new DOMXPath($dom);
$dom_list = $xpath->query("//div[@class='slider']/div/div[contains(@class, 'item')]");
$count = $dom_list->length;

for($i = 0 ; $i < $count; $i++){
if(strpos($dom_list->item($i)->getAttribute("class"), 'active') !== false){
echo("LIVE");
}
$link = "https://www.showtv.com.tr".$dom_list->item($i)->childNodes->item(1)->getAttribute("href");
$time = $dom_list->item($i)->childNodes->item(1)->childNodes->item(1)->childNodes->item(1)->nodeValue;
$title = $dom_list->item($i)->childNodes->item(1)->childNodes->item(1)->childNodes->item(3)->childNodes->item(3)->childNodes->item(1)->nodeValue;
$status = $dom_list->item($i)->childNodes->item(1)->childNodes->item(1)->childNodes->item(3)->childNodes->item(3)->childNodes->item(3)->nodeValue;
$descrip = $dom_list->item($i)->childNodes->item(1)->childNodes->item(1)->childNodes->item(3)->childNodes->item(3)->childNodes->item(5)->nodeValue;
echo($link."
".$time."
".$title."
".$status."
".$descrip);
}
?>
Elysion59

kişi bu mesajı beğendi.

Elysion59 Elysion59 WM Aracı Kullanıcı
  • Üyelik 02.11.2018
  • Yaş/Cinsiyet 27 / E
  • Meslek Öğrenci
  • Konum İstanbul Avrupa
  • Ad Soyad U** P**
  • Mesajlar 20
  • Beğeniler 5 / 2
  • Ticaret 0, (%0)
Teşekkürler cevabınız için acaba regex ile de örnek verme şansınız var mı? Başka bir sistem için daha regex işlemi yapacağım istediğim tarzda örnek bulamadığım için bu yayın akışını yapmak istedim yardımcı olabilirseniz çok mutlu olurum.
 

 

webtegez webtegez İstersen Milyoner Olursun Kullanıcı
  • Üyelik 04.11.2013
  • Yaş/Cinsiyet 29 / E
  • Meslek Elektronik Teknikeri - PHP'ci
  • Konum İstanbul Anadolu
  • Ad Soyad B** P**
  • Mesajlar 329
  • Beğeniler 100 / 99
  • Ticaret 0, (%0)
euthox hocam haklı. Eğer HTML Dökümanları üzerinden parçalama işlemleri yapacaksanız kesinlikle DOM Document olayını öğrenip kullanmanız gerekmektedir.

Regex olayında da illa yardım istersen gene. "Devamını getiremedim" demişsin. Ne yapmak istedin de getiremedim. Belirtirsen yardımcı olabiliriz belki.
 

 

Batuhan P. | SoftVore.com
wmaraci
wmaraci

Elysion59 Elysion59 WM Aracı Kullanıcı
  • Üyelik 02.11.2018
  • Yaş/Cinsiyet 27 / E
  • Meslek Öğrenci
  • Konum İstanbul Avrupa
  • Ad Soyad U** P**
  • Mesajlar 20
  • Beğeniler 5 / 2
  • Ticaret 0, (%0)

webtegez adlı üyeden alıntı

euthox hocam haklı. Eğer HTML Dökümanları üzerinden parçalama işlemleri yapacaksanız kesinlikle DOM Document olayını öğrenip kullanmanız gerekmektedir.

Regex olayında da illa yardım istersen gene. "Devamını getiremedim" demişsin. Ne yapmak istedin de getiremedim. Belirtirsen yardımcı olabiliriz belki.



Şöyle ki Yayın akışında bulunan yayınları alt alta çekmek istiyorum. Basit bir satır şeklinde. Gün program ve saat olarak.

$sonuc = curl_download("https://www.showtv.com.tr/yayin-akisi/");
preg_match_all('@
(.*?)
@si', $sonuc, $parcali);
şeklinde istediğim içeriğin div ine ulaşa biliyorum.

Buradan Mesala Cuma 7 Ağustos 'u almak istiyorum. Sonrasında href kısmındaki linki ile 7 Ağustos ta olanları aşağıya sıralamak istiyorum. Ama nedense div içerisinde bulunanların href ve span kısımlarını çekemedim.


Edit
Sayfa linki kısmına kadar gelebildim. Fakat o günün yayınlarının tümünü çekemiyorum.


$sonuc = curl_download("https://www.showtv.com.tr/yayin-akisi/");

preg_match_all('@
(.*?)
@si', $sonuc, $parcali);

$yayinLink = "";

foreach($parcali[1] as $parca){

preg_match_all('@(.*?)@si', $parca, $sayfaLink);

$yayinLink = " Bugunün Yayını => ".strip_tags($sayfaLink[2][0])."";

print_r($yayinLink);

}




?>
 

 

webtegez webtegez İstersen Milyoner Olursun Kullanıcı
  • Üyelik 04.11.2013
  • Yaş/Cinsiyet 29 / E
  • Meslek Elektronik Teknikeri - PHP'ci
  • Konum İstanbul Anadolu
  • Ad Soyad B** P**
  • Mesajlar 329
  • Beğeniler 100 / 99
  • Ticaret 0, (%0)

Elysion59 adlı üyeden alıntı

Şöyle ki Yayın akışında bulunan yayınları alt alta çekmek istiyorum. Basit bir satır şeklinde. Gün program ve saat olarak.

$sonuc = curl_download("https://www.showtv.com.tr/yayin-akisi/");
preg_match_all('@
(.*?)
@si', $sonuc, $parcali);
şeklinde istediğim içeriğin div ine ulaşa biliyorum.

Buradan Mesala Cuma 7 Ağustos 'u almak istiyorum. Sonrasında href kısmındaki linki ile 7 Ağustos ta olanları aşağıya sıralamak istiyorum. Ama nedense div içerisinde bulunanların href ve span kısımlarını çekemedim.


Edit
Sayfa linki kısmına kadar gelebildim. Fakat o günün yayınlarının tümünü çekemiyorum.


$sonuc = curl_download("https://www.showtv.com.tr/yayin-akisi/");

preg_match_all('@
(.*?)
@si', $sonuc, $parcali);

$yayinLink = "";

foreach($parcali[1] as $parca){

preg_match_all('@(.*?)@si', $parca, $sayfaLink);

$yayinLink = " Bugunün Yayını => ".strip_tags($sayfaLink[2][0])."";

print_r($yayinLink);

}




?>


Buyur hocam senin için bu sabah hızlıca açık açık ve birazcık uzun yoldan kodları yazdım hemen. İstediğin sayfada ki program listeleri array olarak hepsini listeliyor. Burayı inceleyerek çalışmalar yapabilir kendini geliştirebilirsin.

İyi çalışmalar :)


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.showtv.com.tr/yayin-akisi/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
preg_match_all('@
(.*?)
@si', $output, $parcali);
preg_match('@
(.*?)
(.*?)@si', $all_programs['0'], $program_link);
if(is_array($program_link) && count($program_link) == '3'){
list($all_programs, $program_links, $program_contents) = $program_link;
if(is_array($program_links) && is_array($program_contents)){
$program_contents = array_map(function($e){ return preg_replace('~>\s+<~', '><', $e); }, $program_contents);
$program_infos = array();
foreach($program_links as $link_key=>$link_val){
if($program_contents[$link_key]){
preg_match('/(.*?)
preg_match('//', $program_contents[$link_key], $img_src);
preg_match('/(.*?)<\/span>/', $program_contents[$link_key], $title);
preg_match('/(.*?)<\/span>/', $program_contents[$link_key], $status);
preg_match('/(.*?)<\/span>/', $program_contents[$link_key], $description);
$program_infos[] = array(
'link' => sprintf('https://www.showtv.com.tr%s', $link_val)??NULL,
'title' => is_array($title) && $title['1'] ? strip_tags($title['1']) : NULL,
'description' => is_array($description) && $description['1'] ? strip_tags($description['1']) : NULL,
'image' => is_array($img_src) && $img_src['1'] ? strip_tags($img_src['1']) : NULL,
'time' => is_array($time) && $time['1'] ? strip_tags($time['1']) : NULL,
'status' => is_array($status) && $status['1'] ? trim(strip_tags($status['1'])) : NULL,
);
}
}
}
}
}
echo '
'; print_r($program_infos); echo '
';
Elysion59

kişi bu mesajı beğendi.

Batuhan P. | SoftVore.com

Elysion59 Elysion59 WM Aracı Kullanıcı
  • Üyelik 02.11.2018
  • Yaş/Cinsiyet 27 / E
  • Meslek Öğrenci
  • Konum İstanbul Avrupa
  • Ad Soyad U** P**
  • Mesajlar 20
  • Beğeniler 5 / 2
  • Ticaret 0, (%0)
Sen cansın ya valla hocam çok teşekkür ederim. Bugun bunu yapmam önemliydi ve sayende nasıl bir yol izleyeceğimi anladım. Teşekkür ediyorum.



webtegez adlı üyeden alıntı

Buyur hocam senin için bu sabah hızlıca açık açık ve birazcık uzun yoldan kodları yazdım hemen. İstediğin sayfada ki program listeleri array olarak hepsini listeliyor. Burayı inceleyerek çalışmalar yapabilir kendini geliştirebilirsin.

İyi çalışmalar :)


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.showtv.com.tr/yayin-akisi/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
preg_match_all('@
(.*?)
@si', $output, $parcali);
preg_match('@
(.*?)
(.*?)@si', $all_programs['0'], $program_link);
if(is_array($program_link) && count($program_link) == '3'){
list($all_programs, $program_links, $program_contents) = $program_link;
if(is_array($program_links) && is_array($program_contents)){
$program_contents = array_map(function($e){ return preg_replace('~>\s+<~', '><', $e); }, $program_contents);
$program_infos = array();
foreach($program_links as $link_key=>$link_val){
if($program_contents[$link_key]){
preg_match('/(.*?)
preg_match('//', $program_contents[$link_key], $img_src);
preg_match('/(.*?)<\/span>/', $program_contents[$link_key], $title);
preg_match('/(.*?)<\/span>/', $program_contents[$link_key], $status);
preg_match('/(.*?)<\/span>/', $program_contents[$link_key], $description);
$program_infos[] = array(
'link' => sprintf('https://www.showtv.com.tr%s', $link_val)??NULL,
'title' => is_array($title) && $title['1'] ? strip_tags($title['1']) : NULL,
'description' => is_array($description) && $description['1'] ? strip_tags($description['1']) : NULL,
'image' => is_array($img_src) && $img_src['1'] ? strip_tags($img_src['1']) : NULL,
'time' => is_array($time) && $time['1'] ? strip_tags($time['1']) : NULL,
'status' => is_array($status) && $status['1'] ? trim(strip_tags($status['1'])) : NULL,
);
}
}
}
}
}
echo '
'; print_r($program_infos); echo '
';
webtegez

kişi bu mesajı beğendi.

Elysion59 Elysion59 WM Aracı Kullanıcı
  • Üyelik 02.11.2018
  • Yaş/Cinsiyet 27 / E
  • Meslek Öğrenci
  • Konum İstanbul Avrupa
  • Ad Soyad U** P**
  • Mesajlar 20
  • Beğeniler 5 / 2
  • Ticaret 0, (%0)
Hocam tekrardan merhaba :o Ben farklı günleri tıklayınca getirme olayınıda bir türlü beceremedim. Linkini alıyorum ama aktiv olanın hepsini sıralayamıyorum. Foreach ile nasıl 1 haftayı sıralarım bunda da yardımcı olabilir misin.



webtegez adlı üyeden alıntı

Buyur hocam senin için bu sabah hızlıca açık açık ve birazcık uzun yoldan kodları yazdım hemen. İstediğin sayfada ki program listeleri array olarak hepsini listeliyor. Burayı inceleyerek çalışmalar yapabilir kendini geliştirebilirsin.

İyi çalışmalar :)


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.showtv.com.tr/yayin-akisi/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
preg_match_all('@
(.*?)
@si', $output, $parcali);
preg_match('@
(.*?)
(.*?)@si', $all_programs['0'], $program_link);
if(is_array($program_link) && count($program_link) == '3'){
list($all_programs, $program_links, $program_contents) = $program_link;
if(is_array($program_links) && is_array($program_contents)){
$program_contents = array_map(function($e){ return preg_replace('~>\s+<~', '><', $e); }, $program_contents);
$program_infos = array();
foreach($program_links as $link_key=>$link_val){
if($program_contents[$link_key]){
preg_match('/(.*?)
preg_match('//', $program_contents[$link_key], $img_src);
preg_match('/(.*?)<\/span>/', $program_contents[$link_key], $title);
preg_match('/(.*?)<\/span>/', $program_contents[$link_key], $status);
preg_match('/(.*?)<\/span>/', $program_contents[$link_key], $description);
$program_infos[] = array(
'link' => sprintf('https://www.showtv.com.tr%s', $link_val)??NULL,
'title' => is_array($title) && $title['1'] ? strip_tags($title['1']) : NULL,
'description' => is_array($description) && $description['1'] ? strip_tags($description['1']) : NULL,
'image' => is_array($img_src) && $img_src['1'] ? strip_tags($img_src['1']) : NULL,
'time' => is_array($time) && $time['1'] ? strip_tags($time['1']) : NULL,
'status' => is_array($status) && $status['1'] ? trim(strip_tags($status['1'])) : NULL,
);
}
}
}
}
}
echo '
'; print_r($program_infos); echo '
';
 

 

webtegez webtegez İstersen Milyoner Olursun Kullanıcı
  • Üyelik 04.11.2013
  • Yaş/Cinsiyet 29 / E
  • Meslek Elektronik Teknikeri - PHP'ci
  • Konum İstanbul Anadolu
  • Ad Soyad B** P**
  • Mesajlar 329
  • Beğeniler 100 / 99
  • Ticaret 0, (%0)

Elysion59 adlı üyeden alıntı

Hocam tekrardan merhaba :o Ben farklı günleri tıklayınca getirme olayınıda bir türlü beceremedim. Linkini alıyorum ama aktiv olanın hepsini sıralayamıyorum. Foreach ile nasıl 1 haftayı sıralarım bunda da yardımcı olabilir misin.


Hocam bu böyle uzar gider ama. Bunu yapmam epey zamanımı alır fakat inanın o kadar uzun zamanım olsa kendi projelerime daha fazla ağırlık verirdim :)
İnternetten Curl fonksiyonlarını araştırarak hem öğrenebilir hem de kendi sorunlarını rahatlıkla çözmüş olabilirsin.

Burada senin kodlarını benim gibi ücretsiz yazabilecek kişileri illa ki bulursun ama ileri ki zamanlarda seni çıkılmaz yola sokacaktır bundan emin ol. O yüzden hiç sıkılmadan gerekirse bir hafta boyunca sadece bununla ilgilen. Faydalarını göreceksin.

Bunları senin iyiliğin için söylüyorum lütfen yanlış anlama :)
 

 

Batuhan P. | SoftVore.com
wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)