บทที่ 3 คัดเอาแต่เนื้อในบทนี้จะเป็นการคัดกรองเอาเฉพาะส่วนที่เป็นสิ่งสำคัญ นั่นก็คือ url ของข่าวแต่ละข่าวในหน้า Line Today เพื่อที่เราจะเก็บข้อมูลข่าวทั้งหมดมาไว้ในกำมือของเราได้
กระบวนการก็ไม่ยุ่งยาก เพียงแต่ต้องสังเกตโค้ดต้นฉบับของ Line Today ว่าส่วนในหรือส่วนที่เราต้องการ โดยทำการ view code ดูจะได้ส่วนที่ต้องการดังภาพ
ส่วนนี้จะเป็นส่วนเนื้อหาของหน้า Line Today ที่เราสามารถตามสืบต่อไปได้ว่า ลิ้งไหนคืออะไร แต่เราจะทำการตัดเอาเฉพาะส่วนนี้มาก่อน โดยใช้ get_string_between()
แต่ใครจะไม่ตัดก็ได้ เพราะขั้นตอนต่อไป จะสำคัญกว่านี้และทำหน้าที่ครั้งเดียวได้เลย แต่เอาเป็นว่าลองใช้ดูหน่อยจะได้คุ้นเคย คำสั่งคือ
$text = get_string_between($contents,"<script>var categoryJson =","</script>");
จากนั้นเราจะได้ส่วนของเนื้อหามาเก็บไว้ในตัวแปร $text แล้วก็เข้าสู่กระบวนการสำคัญคือ การคัดกรองเอาเฉพาะลิ้งที่เป็นข่าว ซึ่งมีรูปแบบประมาณนี้
https://today.line.me/th/article/df7e6a27d63574ba146fbfc8526f6a197508b56784dbb57577e82d74f4426d82
โดยเราจะใช้ function พระเอกที่มีชื่อว่า preg_match_all() ซึ่งมีหน้าที่ตัดเอาเฉพาะส่วนที่เราต้องการ โดยอาศัยการกำหนดรูปแบบ regular expression ใครไม่รู้จักไปอ่านเพิ่มเอานะครับ โดยการใช้มีรูปแบบคำสั่งดังนี้
preg_match_all ("/https://today.line.me/th/article/(.*)"/U", $text, $result);
โดยใช้ $text เป็นข้อความทั้งหมด และ ผลที่ได้จะถูกเก็บใน $result ในรูปแบบ array
ลองมาดูโค้ดเต็มๆ กัน โดยการสร้างไฟล์ bot-03.php แล้วใส่โค้ดดังนี้
<?php
function get_contents($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36");
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
function get_string_between($string,$start,$end){
$arr = explode($start,$string);
$arr = explode($end,$arr[1]);
return $arr[0];
}
$url = "https://today.line.me/th";
$contents = get_contents($url);
$text = get_string_between($contents,"<script>var categoryJson =","</script>");
preg_match_all ("/https://today.line.me/th/article/(.*)"/U", $text, $result);
echo "<pre>";
print_r($result);
echo "</pre>";
?>
เสร็จแล้วลองรันดู จะได้ผลลัพท์เป็น array ที่เก็บ url และ hash ของข่าวที่อยู่ใน Line Today นะเวลาปัจจุบันทั้งหมดออกมา
http://class.undergroundclass.com/linetoday/bot-03.php จบบทที่ 3