ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => ข้อความที่เริ่มโดย: untilate ที่ 05 กรกฎาคม 2009, 14:16:57



หัวข้อ: ใช้ file_get_contents ผมจะดึงเนื้อหาลักษณะเดียวกัน จากหลายจุดยังไงครับ
เริ่มหัวข้อโดย: untilate ที่ 05 กรกฎาคม 2009, 14:16:57
ผมว่าพี่ๆ คงไม่เข้าใจคำถามผมแน่เลย

สมมุติ ไฟล์นี้นะครับ

......<span class="black_bold">Text A (1)</span>.....
......</a><br>Text A (2)</td>.......

......<span class="black_bold">Text B (1)</span>.....
......</a><br>Text B (2)</td>.......

......<span class="black_bold">Text C (1)</span>.....
......</a><br>Text C (2)</td>.......

ผมต้องการดึงมาเป็น

Text A (2) - Text A (1)
Text B (2) - Text B (1)
Text C (2) - Text C (1)

แต่ถ้าผมเขียนแบบ

โค๊ด:
<?php
$contents implode (''file ('http://xxx'));
$content preg_replace("|(\s)+|"' '$contents);
preg_match('#</a><br>(.*?)</td>#'$content$return1);
preg_match('#<span class="black_bold">(.*?)</span></a><br>#'$content$return2);
echo $return1[1]." -".$return2[1] ;
?>


มันจะได้แค่

Text A (2) - Text A (1)

ผมต้องแก้ตรงไหนอะครับ

ขอบคุณมากครับ


หัวข้อ: Re: ใช้ file_get_contents แล้ว ถ้าเืเนื้อหาที่จะดึงมีหลายที่ ต้องทำไงครับ
เริ่มหัวข้อโดย: beg ที่ 05 กรกฎาคม 2009, 15:54:01
ใช้ preg_match_all  ครับ


หัวข้อ: Re: ใช้ file_get_contents แล้ว ถ้าเืเนื้อหาที่จะดึงมีหลายที่ ต้องทำไงครับ
เริ่มหัวข้อโดย: untilate ที่ 05 กรกฎาคม 2009, 16:00:23
ใช้ preg_match_all  ครับ

ขอบคุณมากครับ

แต่ใช้ยังไงอะ

ให้มันขึ้นบรรทัดใหม่อะ


หัวข้อ: Re: ใช้ file_get_contents แล้ว ถ้าเืเนื้อหาที่จะดึงมีหลายที่ ต้องทำไงครับ
เริ่มหัวข้อโดย: untilate ที่ 05 กรกฎาคม 2009, 17:50:38
ทำไม่ได้จริงๆ ครับ

ลองมาทั้งวันแล้ว

ช่วยหน่อยนะครับ

ขอบคุณครับ


หัวข้อ: Re: ใช้ file_get_contents แล้ว ถ้าเืเนื้อหาที่จะดึงมีหลาย
เริ่มหัวข้อโดย: untilate ที่ 05 กรกฎาคม 2009, 18:23:25
แหะตอบอยู่คนเดียว

ผมว่าพี่ๆ ต้องไปเข้าใจคำถามผมแน่เลย

สมมุติ ไฟล์นี้นะครับ

......<span class="black_bold">Text A (1)</span>.....
......</a><br>Text A (2)</td>.......

......<span class="black_bold">Text B (1)</span>.....
......</a><br>Text B (2)</td>.......

......<span class="black_bold">Text C (1)</span>.....
......</a><br>Text C (2)</td>.......

ผมต้องการดึงมาเป็น

Text A (2) - Text A (1)
Text B (2) - Text B (1)
Text C (2) - Text C (1)

ช่วยผมหน่อยนะครับ

ขอบคุณครับ


หัวข้อ: Re: ใช้ file_get_contents ผมจะดึงเนื้อหาลักษณะเดียวกัน จากหลายจุดยังไงครับ
เริ่มหัวข้อโดย: EThaiZone ที่ 05 กรกฎาคม 2009, 19:57:51
โค๊ด:
<?php

$content 
= <<<EOF

......<span class="black_bold">Text A (1)</span>.....
......</a><br>Text A (2)</td>.......

......<span class="black_bold">Text B (1)</span>.....
......</a><br>Text B (2)</td>.......

......<span class="black_bold">Text C (1)</span>.....
......</a><br>Text C (2)</td>.......

EOF;

preg_match_all('#<span class="black_bold">(.*?)</span>.*?</a><br>(.*?)</td>#s'$content$matches);

foreach(
$matches[1] as $k => $v) {
echo $matches[2][$k]." - ".$matches[1][$k]."<br/>";
}

?>


หัวข้อ: Re: ใช้ file_get_contents ผมจะดึงเนื้อหาลักษณะเดียวกัน จากหลายจุดยังไงครับ
เริ่มหัวข้อโดย: untilate ที่ 05 กรกฎาคม 2009, 20:56:24
ขอบคุณพี่ EThaiZone มากครับ

แต่..

Text A (2) - Text A (1)

มันไม่คู่กันอะ

มันกลายเป็น เอา

Text A (2) - Text B (1)
Text G (2) - Text F (1)
Text B (2) - Text C (1)

นึกออกปะครับ แบบมันจับคู่กันมั่วหมดเลย


หัวข้อ: Re: ใช้ file_get_contents ผมจะดึงเนื้อหาลักษณะเดียวกัน จากหลายจุดยังไงครับ
เริ่มหัวข้อโดย: EThaiZone ที่ 05 กรกฎาคม 2009, 21:23:19
ผมก็ทำตามตัวอย่างข้อความที่คุณให้มา
ถ้าอยากได้ผลลัพท์ถูกต้อง คุณก็ต้องเอาข้อความจริงๆ มา
แต่ผมไม่ได้อยากบอกแบบจับมือสอนนะ

โค้ดที่ผมทำให้ดู นั้นเป็นตัวอย่าง
ถ้ามันรันถูกต้อง ก็ลองมองแนวว่าผมเขียนมาเป็นยังไง
แล้วค่อยเอาไป apply เพื่อใช้จริงอีกที

 :P


หัวข้อ: Re: ใช้ file_get_contents ผมจะดึงเนื้อหาลักษณะเดียวกัน จา
เริ่มหัวข้อโดย: untilate ที่ 05 กรกฎาคม 2009, 21:49:33
ขอบคุณมากครับ

พอดีไม่เคยใช้ เกี่ยวกับพวก ดึงเว็บเลย ก็เลยไม่ค่อยเข้าใจครับ

นี่ครับข้อความเต็มนะครับ

โค๊ด:

<html><head></head><body>
<table width="130" border="0" cellpadding="0" cellspacing="0" class="player_black">
  <tr>
    <td width="6"></td>
    <td width="94"><a href="http://web.in.th/0903387601" target="_parent"><span class="black_bold">ไม่มีหัวใจ...ไร้สมอง</span></a><br />
      NOS</td>
  </tr>
  <tr>
    <td colspan="3"></td>
  </tr>
</table>
<table width="130" border="0" cellpadding="0" cellspacing="0" class="player_black">
  <tr>
    <td width="6"></td>
    <td width="94"><a href="http://web.in.th/0903362701" target="_parent"><span class="black_bold">ประโยคเจ็บ</span></a><br />
      กบ Taxi</td>
  </tr>
  <tr></tr>
</table>
<table width="130" border="0" cellpadding="0" cellspacing="0" class="player_black">
  <tr>
    <td width="6"></td>
    <td width="94"><a href="http://web.in.th/0901557604" target="_parent"><span class="black_bold">อย่างน้อย</span></a><br />
      ต็อง วิตดิวัต พันธุร</td>
  </tr>
  <tr></tr>
</table>
<table width="130" border="0" cellpadding="0" cellspacing="0" class="player_black">
  <tr>
    <td width="6"></td>
    <td width="94"><a href="http://web.in.th/0903363301" target="_parent"><span class="black_bold">ย้ำคิดย้ำจำ</span></a><br />
      ป๋อง ศรัณย์</td>
  </tr>
  <tr></tr>
</table>
<table width="130" border="0" cellpadding="0" cellspacing="0" class="player_black">
  <tr>
    <td width="6"></td>
    <td width="94"><a href="http://web.in.th/0903363501" target="_parent"><span class="black_bold">ไม่ใช่ความจริง</span></a><br />
      มาลีวัลย์</td>
  </tr>
  <tr></tr>
</table>
<table width="130" border="0" cellpadding="0" cellspacing="0" class="player_black">
  <tr>
    <td width="6"></td>
    <td width="94"><a href="http://web.in.th/0903358701" target="_parent"><span class="black_bold">Yes Monday Feat. Jen</span></a><br />
      เจ เจตริน</td>
  </tr>
  <tr></tr>
</table>
<table width="130" border="0" cellpadding="0" cellspacing="0" class="player_black">
  <tr>
    <td width="6"></td>
    <td width="94"><a href="http://web.in.th/0903356001" target="_parent"><span class="black_bold">เหงาจังเลย</span></a><br />
      บี-โอ-วาย</td>
  </tr>
  <tr></tr>
</table>
</body></html>

คือผมอยากให้มันแสดง ชื่อศิลปิน ก่อนแล้วชื่อเพลงอะครับ

เพราะไม่เข้าใจหลักการว่ามัน จะจับคู่ กันยังไง นั่งแก้ไป แก้มากทั้งวัน ทำไม่ได้ซักที


หัวข้อ: Re: ใช้ file_get_contents ผมจะดึงเนื้อหาลักษณะเดียวกัน จากหลายจุดยังไงครับ
เริ่มหัวข้อโดย: EThaiZone ที่ 05 กรกฎาคม 2009, 21:59:20
โค๊ด:
<?php

$content 
= <<<EOF

<html><head></head><body>
<table width="130" border="0" cellpadding="0" cellspacing="0" class="player_black">
  <tr>
    <td width="6"></td>
    <td width="94"><a href="http://web.in.th/0903387601" target="_parent"><span class="black_bold">ไม่มีหัวใจ...ไร้สมอง</span></a><br />
      NOS</td>
  </tr>
  <tr>
    <td colspan="3"></td>
  </tr>
</table>
<table width="130" border="0" cellpadding="0" cellspacing="0" class="player_black">
  <tr>
    <td width="6"></td>
    <td width="94"><a href="http://web.in.th/0903362701" target="_parent"><span class="black_bold">ประโยคเจ็บ</span></a><br />
      กบ Taxi</td>
  </tr>
  <tr></tr>
</table>
<table width="130" border="0" cellpadding="0" cellspacing="0" class="player_black">
  <tr>
    <td width="6"></td>
    <td width="94"><a href="http://web.in.th/0901557604" target="_parent"><span class="black_bold">อย่างน้อย</span></a><br />
      ต็อง วิตดิวัต พันธุร</td>
  </tr>
  <tr></tr>
</table>
<table width="130" border="0" cellpadding="0" cellspacing="0" class="player_black">
  <tr>
    <td width="6"></td>
    <td width="94"><a href="http://web.in.th/0903363301" target="_parent"><span class="black_bold">ย้ำคิดย้ำจำ</span></a><br />
      ป๋อง ศรัณย์</td>
  </tr>
  <tr></tr>
</table>
<table width="130" border="0" cellpadding="0" cellspacing="0" class="player_black">
  <tr>
    <td width="6"></td>
    <td width="94"><a href="http://web.in.th/0903363501" target="_parent"><span class="black_bold">ไม่ใช่ความจริง</span></a><br />
      มาลีวัลย์</td>
  </tr>
  <tr></tr>
</table>
<table width="130" border="0" cellpadding="0" cellspacing="0" class="player_black">
  <tr>
    <td width="6"></td>
    <td width="94"><a href="http://web.in.th/0903358701" target="_parent"><span class="black_bold">Yes Monday Feat. Jen</span></a><br />
      เจ เจตริน</td>
  </tr>
  <tr></tr>
</table>
<table width="130" border="0" cellpadding="0" cellspacing="0" class="player_black">
  <tr>
    <td width="6"></td>
    <td width="94"><a href="http://web.in.th/0903356001" target="_parent"><span class="black_bold">เหงาจังเลย</span></a><br />
      บี-โอ-วาย</td>
  </tr>
  <tr></tr>
</table>
</body></html>

EOF;

preg_match_all('#<span class="black_bold">(.*?)</span></a><br />(.*?)</td>#s'$content$matches);

foreach(
$matches[1] as $k => $v) {
echo $matches[2][$k]." - ".$matches[1][$k]."<br/>";
}

?>

มันไม่ยากครับ ฝึกบ่อยๆ หมั่น print_r บ่อยๆ
ศึกษา output สัมพันธ์ยังไงกับตัว regex
เดี๋ยวก็คล่องเองครับ


หัวข้อ: Re: ใช้ file_get_contents ผมจะดึงเนื้อหาลักษณะเดียวกัน จากหลายจุดยังไงครับ
เริ่มหัวข้อโดย: untilate ที่ 06 กรกฎาคม 2009, 10:57:04
ผมทำได้แล้วครับ

ขอบคุณมากๆ แต่รู้สึกมันจะช้าจังอะครับ

มันเกิดจาก ตรงไหนอะครับ

โค๊ด:
<?php
$file 
file_get_contents("http://xx.com");
$content ereg_replace('[[:space:]]+'''trim($file));
$contentnew iconv('tis-620''utf-8'$content);
preg_match_all('#<spanclass="player_black_bold">(.*?)</span></a><br>(.*?)</td>#s'$contentnew$matches);
foreach(
$matches[1] as $k => $v) {
echo '<a href="search.php?q='.$matches[1][$k]."%2B".$matches[2][$k].'">'.$matches[1][$k]." - ".$matches[2][$k].'</a>'."<br/>
"
;
}
?>


หัวข้อ: Re: ใช้ file_get_contents ผมจะดึงเนื้อหาลักษณะเดียวกัน จากหลายจุดยังไงครับ
เริ่มหัวข้อโดย: thenetxx ที่ 08 กรกฎาคม 2009, 16:44:16
ผมทำได้แล้วครับ

ขอบคุณมากๆ แต่รู้สึกมันจะช้าจังอะครับ

มันเกิดจาก ตรงไหนอะครับ

โค๊ด:
<?php
$file 
file_get_contents("http://xx.com");
$content ereg_replace(&#39;[[:space:]]+&#39;, &#39;&#39;, trim($file));
$contentnew iconv(&#39;tis-620&#39;, &#39;utf-8&#39;, $content);
preg_match_all(&#39;#<spanclass="player_black_bold">(.*?)</span></a><br>(.*?)</td>#s&#39;, $contentnew, $matches);
foreach($matches[1] as $k => $v) {
echo &#39;<a href="search.php?q=&#39;.$matches[1][$k]."%2B".$matches[2][$k].&#39;">&#39;.$matches[1][$k]." - ".$matches[2][$k].&#39;</a>&#39;."<br/>
";
}
?>


ช้าตรง file_get_contents("http://xx.com");

กับตรง ความเร็ว host และ network ระหว่าง server รวมถึงความเร็ว internet ของคุณเองครับ

^___^