PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum

สอบถามเรื่องการใช้งาน DOM

สอบถามเรื่องการใช้งาน DOM
สอบถามเรื่องการเขียน DOM หน่อยครับ
 
ผมเขียนโค๊ดเพื่อจะดึงข้อมูลจากเว็บมาแบบนี้
 
$DOM = new DOMDocument('1.0','utf-8');
$DOM->loadHTML('<meta http-equiv="content-type" content="text/html; charset=utf-8">'.$str);
 
$items = $DOM->getElementsByTagName('div');
 
for ($i = 0; $i < $items->length; $i++){
   
echo $items->item($i)->nodeValue."<br/>";   
      
}
 
****ข้อมูลใน $str****
 
<div class="pin-item">
        <div class="pin-title">
<a href="/topic/32602481" target="_blank">ทดสอบ ปักหมุด 1</a> 
</div>
</div>
 
<div class="pin-item">
        <div class="pin-title">
<a href="/topic/32602481" target="_blank">ทดสอบ ปักหมุด 2</a> 
</div>
</div>
 
<div class="pin-item">
        <div class="pin-title">
<a href="/topic/32602481" target="_blank">ทดสอบ ปักหมุด 3</a> 
</div>
</div>
 
<div class="pin-item">
        <div class="pin-title">
<a href="/topic/32602481" target="_blank">ทดสอบ ปักหมุด 4</a> 
</div>
</div>
 
<div class="pin-item">
        <div class="pin-title">
<a href="/topic/32602481" target="_blank">ทดสอบ ปักหมุด 5</a> 
</div>
</div>
 
<div class="post-item  ">
    <div class="post-item-type">
<span class="icon-mini-posttype icon-mini-posttype-que grayscale"></span>
</div>
    <div class="post-item-title">
<a target="_blank" href="/topic/32620943">ทดสอบโพสที่ 1</a>
</div>
    <div class="post-item-by">
<span class="by-name">สมาชิกหมายเลข 1061414</span> - <span class="timestamp"> <abbr class="timeago" data-utime="09/24/2014 09:58:31" title="24 กันยายน 2557 เวลา  09:58:31 น."></abbr> </span>
    </div>
    <div class="post-item-footer">
<div class="post-item-taglist">
<div class="tag-item "> <a class="tag-title" href="/tag/น้ำมันเครื่อง" target="_blank"> 
<span data-tag="น้ำมันเครื่อง"> <em>น้ำมันเครื่อง</em> </span> </a> 
</div>
<div class="tag-item "> 
<a class="tag-title" href="/tag/รถยนต์" target="_blank"> <span data-tag="รถยนต์"> <em>รถยนต์</em> </span> </a> 
</div>
</div>
     </div>
</div>
 
*************************
แบบนี้อะครับ
ผลออกมาคือ มันออกข้อมูลทุกอย่างมาเลย
 
ทดสอบ ปักหมุด 1
ทดสอบ ปักหมุด 2
ทดสอบ ปักหมุด 3
ทดสอบ ปักหมุด 4
ทดสอบ ปักหมุด 5
ทดสอบโพสที่ 1
 
ถ้าผมจะกรองโดยแยกตามคลาส
class="pin-item"
แล้วเก็บ a href ไว้ใช้งานด้วย
ต้องทำยังไงอ่าครับ 
ลองมาหลายวิธีละ งง มาก 
รบกวนด้วยครับ


โดย:  ืnickson IP: 118.174.31.xxx วันที่: 24-09-2014 เวลา: 11:09:55

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ


  • ( หรือ สามารถทำการ สมัครสมาชิก และล็อกอิน ด้วย ปุ่ม Log in with Facebook ด้านล่าง )
 ความคิดเห็นที่ 21
ได้แล้วครับ

เหนื่อยเลย
ขอบคุณมากครับ เสียเวลากับผมทั้งวันเลย ^^

โดย:  ืnickson IP: 118.174.31.xxx วันที่: 24-09-2014 เวลา: 16:26:42
 ความคิดเห็นที่ 20

แต่ยังใช้กับ

  1. $ret = $html->find('div.pin-title a');  
  2. foreach($ret as $v){  
  3.         echo $v."<br>";  
  4. }


ไม่ได้อะครับ
 


โดย:  ืnickson IP: 118.174.31.xxx วันที่: 24-09-2014 เวลา: 16:25:42
 ความคิดเห็นที่ 19
อืม ใช้ตัวอย่างนี้ดูได้เลย

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Din</title>
</head>
<body>
<?php
include("simple_html_dom.php");
// Create a DOM object from a URL
$url="http://dev-activity.com/DOM/testurl.htm";
$ch = curl_init($url);  
curl_setopt($ch, CURLOPT_HEADER, false);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
$html = curl_exec($ch);
curl_close($ch);  


$html_obj = str_get_html($html);
$ret = $html_obj->find('div.pin-title a');
foreach($ret as $v){
		echo $v."<br>";
}
?>
</body>
</html>


โดย:  Ninenik IP: 124.122.166.xxx วันที่: 24-09-2014
 ความคิดเห็นที่ 18
http://dev-activity.com/DOM/test2.php

Yesssssssssssssssssssssssssssssssssssssss

ได้แล้วครับ
ขอบคุณมากกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกก
ผมหาหลายวันมากเลย
ขอบคุณครับ



โดย:  ืnickson IP: 118.174.31.xxx วันที่: 24-09-2014 เวลา: 16:23:34
 ความคิดเห็นที่ 17
โอเค รู้สาเหตแล้ว

server เขาปิดฟังก์ชั่นดึงไฟล์ file_get_contents

ทำให้ไม่มีข้อมูลมาแสดง ต้องลองใช้ curl ดู

ใช้โค้ดนี้ทดสอบดูอีกที

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Din</title>
</head>
<body>
<?php
include("simple_html_dom.php");
// Create a DOM object from a URL
echo 'Current PHP version: ' . phpversion();
$url="http://dev-activity.com/DOM/testurl.htm";
$ch = curl_init($url);  
curl_setopt($ch, CURLOPT_HEADER, false);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
$html = curl_exec($ch);
curl_close($ch);  
echo $html;
?>
</body>
</html>


โดย:  Ninenik IP: 124.122.166.xxx วันที่: 24-09-2014
 ความคิดเห็นที่ 16
<?php header('Content-Type: text/html; charset=utf-8'); ?>

<?php
// you can add anoother curl options too
// see here - http://php.net/manual/en/function.curl-setopt.php
function get_dataa($url) {
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_HEADER, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
  curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}



$variableee = get_dataa('http://dev-activity.com/DOM/testurl.htm');
//echo $variableee;
echo "****************************START****************************"."<br>";
$str = $variableee;
$DOM = new DOMDocument('1.0','utf-8');
   $DOM->loadHTML('<meta http-equiv="content-type" content="text/html; charset=utf-8">'.$str);

  $items = $DOM->getElementsByTagName('div');
//$ret = $items ->find('div[class="post-item-title"'); 
//echo $ret."<br/>";  
   for ($i = 0; $i < $items->length; $i++){
   
echo $items->item($i)->nodeName. " - " .$items->item($i)->nodeValue."<br/>";   
      
        }
echo "****************************STOP****************************"."<br>";
?>

แบบนี้ได้ ตาม 

http://dev-activity.com/DOM/test1.php
แต่ผมจะหาด้วยคลาสไม่ได้อะครับ


โดย:  ืnickson IP: 118.174.31.xxx วันที่: 24-09-2014 เวลา: 16:12:35
 ความคิดเห็นที่ 15
http://dev-activity.com/DOM/test2.php

Current PHP version: 5.3.13

ครับ


โดย:  ืnickson IP: 118.174.31.xxx วันที่: 24-09-2014 เวลา: 16:05:41
 ความคิดเห็นที่ 14
ผิดๆ โค้ดตัวนี้แทน ลองใหม่อีกที

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Din</title>
</head>
<body>
<?php
include("simple_html_dom.php");
// Create a DOM object from a URL
echo 'Current PHP version: ' . phpversion();
$html = file_get_contents('http://dev-activity.com/DOM/testurl.htm');
echo "<br>";
echo $html;
?>
</body>
</html>


โดย:  Ninenik IP: 124.122.166.xxx วันที่: 24-09-2014
 ความคิดเห็นที่ 13
http://dev-activity.com/DOM/test2.php

Current PHP version: 5.3.13

ครับ


โดย:  ืnickson IP: 118.174.31.xxx วันที่: 24-09-2014 เวลา: 15:59:11
 ความคิดเห็นที่ 12
ลองเอาโค้ดนี้ใส่ไฟล์ test2.php ดู แล้วแจ้งผล

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Din</title>
</head>
<body>
<?php
include("simple_html_dom.php");
// Create a DOM object from a URL
echo 'Current PHP version: ' . phpversion();
$html = file_get_html('http://dev-activity.com/DOM/testurl.htm');
echo "<br>";
echo $html;
$ret = $html->find('div.pin-title a');
foreach($ret as $v){
		echo $v."<br>";
}
?>
</body>
</html>


โดย:  Ninenik IP: 124.122.166.xxx วันที่: 24-09-2014
 ความคิดเห็นที่ 11
permission ผมเป็น 644 อ่าคับ
ต้องเปลี่ยนเป็นอะไรรึเปล่าคับ

โดย:  ืnickson IP: 118.174.31.xxx วันที่: 24-09-2014 เวลา: 15:43:13
 ความคิดเห็นที่ 10
ถ้าไม่มีอะไรผิดพลาด โค้ดตามตัวอย่างความเห็นที่ 3 ผลที่ได้จะเป็น
ตาม ลิ้งค์นี้

<a href="/topic/32602481" target="_blank">ทดสอบ ปักหมุด 1</a><br>
<a href="/topic/32602481" target="_blank">ทดสอบ ปักหมุด 2</a><br>
<a href="/topic/32602481" target="_blank">ทดสอบ ปักหมุด 3</a><br>
<a href="/topic/32602481" target="_blank">ทดสอบ ปักหมุด 4</a><br>
<a href="/topic/32602481" target="_blank">ทดสอบ ปักหมุด 5</a><br>


http://www.ninenik.com/demo/dom/dom.php

โดย:  Ninenik IP: 124.122.166.xxx วันที่: 24-09-2014
 ความคิดเห็นที่ 9
หรือว่าเป็น กับ server ไม่รองรับหรือป่ว ไม่แน่ใจ
ถ้าก็อบโค้ดจาก ความเห็นที่ 3 ไปไว้ในไฟล์ชื่อ test2.php 
แล้ว ทดสอบรัน ถ้าไม่แสดงข้อมูล
คิดว่าน่าจะเป็นกับ server ไม่แน่ใจว่าต้องไปแก้ตรงไหน
ลองทำตามดู



โดย:  Ninenik IP: 124.122.166.xxx วันที่: 24-09-2014
 ความคิดเห็นที่ 8
http://dev-activity.com/DOM/test2.php

ตัวนี้เป็น php ครับ 
มันไม่เวิค ><
ผมเลยลองแบบ html อีกตัว


http://dev-activity.com/DOM/dom.JPG

อันนี้ไฟล์ในเซิฟครับ

โดย:  ืnickson IP: 118.174.31.xxx วันที่: 24-09-2014 เวลา: 14:46:08
 ความคิดเห็นที่ 7
แง่ว ไฟล์ php ต้องนามสกุล php
ถึงจะทำงาน 

โดย:  Ninenik IP: 124.122.166.xxx วันที่: 24-09-2014
 ความคิดเห็นที่ 6
โหลดไฟล์นี้มาหรือยัง simple_html_dom.php

ไปโหลดไฟล์นี้มาใช้ include ตามลิ้งค์บทความ
ลองวางโค้ดที่ทดสอบมาดู ไฟล์ test2.php

โดย:  Ninenik IP: 124.122.166.xxx วันที่: 24-09-2014
 ความคิดเห็นที่ 5
http://dev-activity.com/DOM/test3.htm

อันนี้ก๊อปไปไม่ทำอะไรเลย เซพเป็น htm ครับ

โดย:  ืnickson IP: 118.174.31.xxx วันที่: 24-09-2014 เวลา: 14:38:41
 ความคิดเห็นที่ 4
ขอรบกวนอีกหน่อยได้ไหมครับ
ผมไม่ผ่านตรงนี้
$ret = $html->find('div.pin-title a');  

http://dev-activity.com/DOM/test2.php



โดย:  ืnickson IP: 118.174.31.xxx วันที่: 24-09-2014 เวลา: 14:31:43
 ความคิดเห็นที่ 3
ในตัวอย่าง วิธีใช้ คอ่นข้างละเอียด ลองอ่านดีๆ

ลองเอาตัวอย่างไปดูเป็นแนวทาง

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Din</title>
</head>
<body>
<?php
include("simple_html_dom.php");
// Create a DOM object from a URL
$html = file_get_html('http://dev-activity.com/DOM/testurl.htm');
$ret = $html->find('div.pin-title a');
foreach($ret as $v){
		echo $v."<br>";
}
?>
</body>
</html>


โดย:  Ninenik IP: 124.122.166.xxx วันที่: 24-09-2014
 ความคิดเห็นที่ 2
พอมีไฟล์ ให้ลองไหมครับ
ผมลองทำตามแล้วผลไม่ออก

ไฟล์ที่ลองดึงข้อมูลได้ตั้งแต่ <?php เลยอ่าครับ
ผมมือใหม่จริงๆ

ดึงข้อมูลจาก url นี้ ครับ http://dev-activity.com/DOM/testurl.htm

โดย:  ืnickson IP: 118.174.31.xxx วันที่: 24-09-2014 เวลา: 11:43:13
 ความคิดเห็นที่ 1
ลองดูตัวนี้เป้นแนวทาง

แนะนำ PHP Simple HTML DOM Parser สำหรับ ดึงข้อมูล เฉพาะส่วนที่ต้องการ 
http://www.ninenik.com/content.php?arti_id=388 via @ninenik



โดย:  Ninenik IP: 124.122.166.xxx วันที่: 24-09-2014