[บทที่ 3]สอนเขียน PHP ดึงข่าวจาก LINE TODAY เก็บลงฐานข้อมูล Step by Step[สายเทา]

เริ่มโดย powerpc, 14 ธันวาคม 2016, 14:38:32

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

skscale

[direct=https://www.skscale.com]บริษัท เอส.เค. เครื่องชั่ง จำกัด[/direct]
[direct=https://www.meengineer.co.th]บริษัท เมคคานิคอล เอ็นจิเนียริ่ง จำกัด[/direct]
[direct=https://www.meengineer.co.th/truck-scales.php]เครื่องชั่งรถบรรทุก Truck Scales[/direct]
[direct=https://www.skscale.com/truck-scales.php]เครื่องชั่งรถบรรทุก Truck Scales[/direct]

Oxiam

ขอบคุณครับ แต่เสียวๆ ว่าหลังจากนี้ Line จะโดนถล่มหรือเปล่า  :P
แนะนำโฆษณา Popunder เรทพอประมาณแต่...ได้วิวโคตรเยอะ
[direct=https://bit.ly/2IzohrT]คลิกเลย[/direct]

userhuman

ขอสอบถามนิดนึงนะครับ ว่าทำไมถึงใช้ CURL แทนที่จะใช้ DOM Document อะครับ

ถามเพื่อเป็นความรู้เฉยๆนะครับ  :wanwan017:
[direct=https://meframephoto.com]รับอัดรูปออนไลน์ ขยายรูป ทำภาพเก่าให้ใหม่ ใส่กรอบรูป[/direct]

[direct=https://medium.com/@nicksq]อ่านเขียนโปรแกรมยังไงให้เทพ[/direct]

[direct=https://www.youtube.com/channel/UC1ZQ_Sxmrlv4dxIhB3LUwPA]สอนเขียนโปรแกรม และเทคนิคฟรี กด Subscribe & กระดิ่งไว้นะ[/direct]

OmegaBoss


powerpc

อ้างถึงจาก: userhuman ใน 15 ธันวาคม 2016, 17:04:37
ขอสอบถามนิดนึงนะครับ ว่าทำไมถึงใช้ CURL แทนที่จะใช้ DOM Document อะครับ

ถามเพื่อเป็นความรู้เฉยๆนะครับ  :wanwan017:

ทำงานคนละจุดประสงค์ครับ

curl เป็นเหมือนโปรแกรมบราวเซอร์ ที่ทำงานตั้งแต่ต้นทางเพื่อขอข้อมูลจาก server ซึ่ง curl สามารถแปลงร่างเป็นอะไรก็ได้ (อาจจะเว่อร์ไปหน่อย แต่คือเหมือนหลอก server ว่าเป็นบราว์เซอร์ได้) เพื่อติดต่อกับ server เป้าหมาย แล้วเอาข้อมูลที่ response ออกมาจาก server มาใช้งาน

DOM Document เป็นปลายทาง ที่ได้ข้อมูลมาแล้ว เอามาจัดการตามที่ต้องการ

จริง ๆ ก็ใช้ curl ดึงข้อมูลมา แล้วใช้ DOM Document มาจัดการข้อมูลอีกที

จะบอกว่าถ้าจะเขียน php เพื่อติดต่อกับ server อื่น curl คือพระเอกตัวจริง รายละเอียดลึก ๆ ลองหาข้อมูลดูครับ ผมก็พอใช้เป็น ^^
[แจกฟรี] [direct=https://thai.ac]เว็บไซต์โรงเรียนสำเร็จรูป[/direct]
[แจกฟรี] [direct=https://obec.ac]เว็บไซต์ครูสำเร็จรูป[/direct]
[ตัวแทนจำหน่าย] [direct=https://lotteryonline.in.th]มังกรฟ้า [/direct] [direct=https://lotteryonline.in.th]ลอตเตอรี่ออนไลน์[/direct]

powerpc

บทที่ 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($chCURLOPT_RETURNTRANSFER1);
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
curl_setopt($chCURLOPT_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($chCURLOPT_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
[แจกฟรี] [direct=https://thai.ac]เว็บไซต์โรงเรียนสำเร็จรูป[/direct]
[แจกฟรี] [direct=https://obec.ac]เว็บไซต์ครูสำเร็จรูป[/direct]
[ตัวแทนจำหน่าย] [direct=https://lotteryonline.in.th]มังกรฟ้า [/direct] [direct=https://lotteryonline.in.th]ลอตเตอรี่ออนไลน์[/direct]

Shaytalay

อ้างถึงจาก: powerpc ใน 15 ธันวาคม 2016, 16:32:37
อ้างถึงจาก: Shaytalay ใน 15 ธันวาคม 2016, 15:35:44
ขอสอบถามครับ ถ้าอยากเขียนแบบ ไม่ใช้ \ ต้องทำยังไงหรอครับ
$text =  get_string_between($contents,"<meta name=\"description\" content=\"","โดย LINE TODAY\">");

แบบนี้ก็ได้ครับ
อ้างถึง$text =  get_string_between($contents,'<meta name="description" content="','โดย LINE TODAY">');


ขอบคุณครับ :wanwan017: :wanwan017:

userhuman

อ้างถึงจาก: powerpc ใน 15 ธันวาคม 2016, 17:36:30
อ้างถึงจาก: userhuman ใน 15 ธันวาคม 2016, 17:04:37
ขอสอบถามนิดนึงนะครับ ว่าทำไมถึงใช้ CURL แทนที่จะใช้ DOM Document อะครับ

ถามเพื่อเป็นความรู้เฉยๆนะครับ  :wanwan017:

ทำงานคนละจุดประสงค์ครับ

curl เป็นเหมือนโปรแกรมบราวเซอร์ ที่ทำงานตั้งแต่ต้นทางเพื่อขอข้อมูลจาก server ซึ่ง curl สามารถแปลงร่างเป็นอะไรก็ได้ (อาจจะเว่อร์ไปหน่อย แต่คือเหมือนหลอก server ว่าเป็นบราว์เซอร์ได้) เพื่อติดต่อกับ server เป้าหมาย แล้วเอาข้อมูลที่ response ออกมาจาก server มาใช้งาน

DOM Document เป็นปลายทาง ที่ได้ข้อมูลมาแล้ว เอามาจัดการตามที่ต้องการ

จริง ๆ ก็ใช้ curl ดึงข้อมูลมา แล้วใช้ DOM Document มาจัดการข้อมูลอีกที

จะบอกว่าถ้าจะเขียน php เพื่อติดต่อกับ server อื่น curl คือพระเอกตัวจริง รายละเอียดลึก ๆ ลองหาข้อมูลดูครับ ผมก็พอใช้เป็น ^^

โอ๊ว ขอบคุณครับ  :wanwan017:  :wanwan011:
[direct=https://meframephoto.com]รับอัดรูปออนไลน์ ขยายรูป ทำภาพเก่าให้ใหม่ ใส่กรอบรูป[/direct]

[direct=https://medium.com/@nicksq]อ่านเขียนโปรแกรมยังไงให้เทพ[/direct]

[direct=https://www.youtube.com/channel/UC1ZQ_Sxmrlv4dxIhB3LUwPA]สอนเขียนโปรแกรม และเทคนิคฟรี กด Subscribe & กระดิ่งไว้นะ[/direct]

googlerich


Twenty-One

เจ๋งมากครับ ดึงข้อมูลจาก line มาเก็บ ไว้ใช้

ขอบคุณครับ

:wanwan017:
# บริการโฮสติ้งขั้นเทพ 24/7 เปิดให้บริการ web hosting มาแล้ว 14 ปี ลูกค้ากว่า 40,000 ราย ให้ความไว้วางใจ
# [direct=https://www.hostneverdie.com]hosting[/direct] คุณภาพสูง ดูแลระบบโดย system engineer ประสบการณ์สูง
# [direct=https://www.hostneverdie.com]host[/direct] เร็ง แรง ไม่มีล่ม ติดตั้ง cms ฟรี
# [direct=https://www.hostneverdie.com/vps-server]vps[/direct] ราคาถูก 50GB 999 บาท

[direct=https://www.hostneverdie.com][/direct]



gamekittituh

ให้บริการรับทำเว็บไซต์ WordPress หรือ Web Application
[direct=https://tawansoft.com/%E0%B8%A3%E0%B8%B1%E0%B8%9A%E0%B8%97%E0%B8%B3%E0%B9%80%E0%B8%A7%E0%B9%87%E0%B8%9A%E0%B9%84%E0%B8%8B%E0%B8%95%E0%B9%8C/]บริการรับทำเว็บไซต์ WordPress ราคาถูก[/direct]
[direct=https://www.tawansoft.com]รับทำเว็บไซต์เชียงใหม่[/direct]
[direct=https://www.hostneverdie.com/support/aff.php?aff=3898]Hosting คุณภาพ ราคาถูก ซัพพอทตลอด 24 ชม.[/direct]
[direct=https://invol.co/cleeh3f]10.10 Mega Campaign Updated![/direct]

smapan

[direct=http://cp.siamhostweb.com/cart.php?gid=1]จูมล่าโฮส สยามโฮสเว็บ[/direct] [direct=http://www.modty.com]modty.com[/direct]
[direct=http://www.apartment.in.th]รวมที่พัก เช่ารายวัน ที่พักเช่ารายเดือนมากที่สุดแจ่มจริง[/direct]
***Tel 083-757-1515 ติดปัญหา Joomla ตรงไหนรับปรึกษาฟรี โทรมาเถอะครับ ถ้าตอบได้ช่วยแน่นอน ไม่มีกั้ก. ***


acomthail

ใครอยากได้ Facebook, YouTube, Google/Gmail, Twitter, Tinder, Instagram, Yahoo, Hotmail  รับจ้างสมัครไอดี ติดต่อ inbox มาเลยครับ