บทที่ 2 เริ่มการตัดตอนในบทที่ 1 เราสามารถดึงข้อมูลจาก Line Today มาได้แล้ว ซึ่งจะอยู่ในรูปแบบของภาษา html+javascript แต่ทั้งหมดนั้นมันก็คือข้อความยาว ๆ เท่านั้นเอง
สิ่งต่อไปคือการนำข้อความที่ได้ มาตัดเอาเฉพาะส่วนที่เราต้องการ ซึ้งขันตอนนี้เราจะต้องเขียนคำสั่งในการตัดเอาส่วนที่เราต้องการจากข้อความทั้งหมดที่เรามี โดยจะตั้งชื่อว่า get_string_between() หน้าที่คือตัดเอาเฉพาะส่วนข้อความตรงกลาง จากข้อความหัวและท้ายที่เรากำหนดเข้าไป
<?php
/* old function 2016-12-14
function get_string_between($string,$start,$end){
$arr = explode($end,$string);
$arr = explode($start,$arr[0]);
return $arr[1];
}
*/
function get_string_between($string,$start,$end){
$arr = explode($start,$string);
$arr = explode($end,$arr[1]);
return $arr[0];
}
?>
โดย function นี้ จะทำหน้าที่ง่าย ๆ ตัวอย่างเช่น
ข้อความทั้งหมดคือ 0123456789 เราจะตัดเอาเฉพาะ 456 เราจะเอา 3 และ 7 เป็นตัวแบ่ง จะได้คำสั่งประมาณ get_string_between('0123456789','3','7');
โดยการทำงานเป็นขั้นตอนอย่างนี้
$arr = explode($end,$string); // ตัดข้อความโดยใช้ explode โดยเอา ข้อความสุดท้ายที่เราต้องการเป็นตัวแบ่ง แล้วเก็บไว้ในตัวแปร array
โดยข้อความด้านหน้าของตัวแบ่งจะอยู่ใน array ที่ 0 ข้อความที่อยู่หลังจะอยู่ array ที่ 1 (ถ้าตัวแบ่งมีหลายครั้งในข้อความ ก็จะเก็บใน array ตัวถัด ๆ ไป)
จากตัวอย่างขั้นตอนแรกเราจะได้
$arr[0] = 0123456
$arr[1] = 89
ในที่นี่เราสนใจเฉพาะ $arr[0] เพราะเป็นส่วนที่เราต้องการ เพื่อไปตัดต่อในขั้นตอนที่ 2
$arr = explode($start,$arr[0]);
ในลักษณะเดียวกัน เมื่อทำการ explode ก็จะได้
$arr[0] = 012
$arr[1] = 456
ซึ่งใน $arr[1] คือสิ่งที่เราต้องการ จึงส่งค่ากลับออกมาจาก function
โดยการทำงานเป็นขั้นตอนอย่างนี้
$arr = explode($start,$string); // ตัดข้อความโดยใช้ explode โดยเอา ข้อความเริ่มต้นที่เราต้องการเป็นตัวแบ่ง แล้วเก็บไว้ในตัวแปร array
โดยข้อความด้านหน้าของตัวแบ่งจะอยู่ใน array ที่ 0 ข้อความที่อยู่หลังจะอยู่ array ที่ 1 (ถ้าตัวแบ่งมีหลายครั้งในข้อความ ก็จะเก็บใน array ตัวถัด ๆ ไป)
จากตัวอย่างขั้นตอนแรกเราจะได้
$arr[0] = 012
$arr[1] = 456789
ในที่นี่เราสนใจเฉพาะ $arr[1] เพราะเป็นส่วนที่เราต้องการ เพื่อไปตัดต่อในขั้นตอนที่ 2
$arr = explode($end,$arr[1]);
ในลักษณะเดียวกัน เมื่อทำการ explode ก็จะได้
$arr[0] = 456
$arr[1] = 89
ซึ่งใน $arr[0] คือสิ่งที่เราต้องการ จึงส่งค่ากลับออกมาจาก function
เมื่อเราได้ function ในการตัดข้อความที่เราต้องการแล้ว ก็นำมาประกอบร่างกับบทที่ 1 แต่จะจับบทที่ 1 เข้าไปใน function โดยตั้งชื่อว่า get_contents() จะได้โค้ดดังต่อไปนี้
<?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;
}
/* old function 2016-12-14
function get_string_between($string,$start,$end){
$arr = explode($end,$string);
$arr = explode($start,$arr[0]);
return $arr[1];
}
*/
function get_string_between($string,$start,$end){
$arr = explode($start,$string);
$arr = explode($end,$arr[1]);
return $arr[0];
}
?>
เมื่อสร้าง function ไว้แล้วก็ทำการเรียกใช้งาน โดย function get_contents() จะทำหน้าที่ดึงข้อมูลจาก url ที่เราต้องการมาให้ จากนั้นใช้ function get_string_between() มาทำการตัดเอาเฉพาะส่วนที่เราต้องการ
*** แต่ get_string_between มีข้อจำกัดอยู่ว่า คำที่จะเป็นจุด start แล้ว end จะต้องเป็นข้อความเดียวที่ปรากฏอยู่ในข้อความต้นฉบับทั้งหมด ห้ามมีซ้ำกันหลายที่ เพราะตัว get_string_between จะไปจับเอาเฉพาะคำแรกที่เจอเท่านั้น หากคำนั้นไปอยู่กลางข้อความที่เราต้องการ มันก็จะตัดเอาเฉพาะส่วนแรก
คราวนี้เราลองมาตัดเอาเฉพาะ discription ของเว็บ Line Today กันดู โดยให้เรา view source หน้า Line today ขึ้นมาดูก่อน จะได้ตามภาพ
ดังนั้นในการกำหนด คำที่จะเอามาตัดส่วนหัวและท้าย ก็ควรเป็น <meta name="description" content=" และ โดย LINE TODAY"> เพราะค้นหาแล้วไม่มีส่วนที่ซ้ำกันอีกในข้อความทั้่งหมด ดังนั้นโค้ดทั้งหมดจะเป็นดังนี้ โดยให้สร้างไฟล์ bot-02.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,"<meta name=\"description\" content=\"","โดย LINE TODAY\">");
header("Content-Type: text/html; charset=utf-8");
echo $text;
?>
จากนั้นลองรันไฟล์ bot-02.php (
http://class.undergroundclass.com/linetoday/bot-02.php ) จะได้ข้อความตามภาพด้านล่าง
##########################################
2016-12-15 ปรับ function get_string_between()
<?php
function get_string_between($string,$start,$end){
$arr = explode($start,$string);
$arr = explode($end,$arr[1]);
return $arr[0];
}
?>