Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > จะ preg_math เก็บค่าลิงค์ album_id จากลิงค์นี้ยังไงครับ https://www.facebook.com/pg/PAGENAME/photos/?tab=album&album_id=326294964442752



 

จะ preg_math เก็บค่าลิงค์ album_id จากลิงค์นี้ยังไงครับ https://www.facebook.com/pg/PAGENAME/photos/?tab=album&album_id=326294964442752

 



Topic : 130207



โพสกระทู้ ( 3 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook



ช่วยดู preg_match ให้หน่อยครับ ผมลองเช็คค่า preg_match กับเว็บ https://regex101.com/ ก็แสดงค่ามา 4 วงเล็บออกมาปกติครับ แต่พอดึงข้อความจริงกลับใช้ไม่ได้ครับงงมากครับ เหมือนกับว่าในส่วนตัวแปร $tmp[4] มันไม่เก็บค่าครับ ต้องการเก็บค่าในส่วนของ 326294964442752 ครับ มีตรงไหนที่ผมพลาดไปไหมครับ แก้มาครึ่งวันละไม่ได้ซักทีครับ

url ที่ต้องการ preg_match :
https://www.facebook.com/pg/NAMEPAGE/photos/?tab=album&album_id=326294964442752

Code (PHP)
        function getAlbumId($url) {
            preg_match('/https?:\/\/(www).?facebook.com\/pg\/([a-zA-Z0-9_.\- ]*)\/photos\/(\?tab=album&album_id=)([0-9]*)?/i', $url, $tmp);
            return isset($tmp[4]) ? $tmp[4] : false;  
        }
        $albumid = getAlbumId($url);  


$albumid ไม่แสดงค่าอะไรเลยครับ ผมต้องเพิ่งเติมอะไรไหมครับ $albumid ถึงจะเป็น 326294964442752



Tag : PHP









ประวัติการแก้ไข
2018-02-06 12:37:08
2018-02-06 18:26:05
2018-02-06 18:28:14
2018-02-06 18:34:53
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2018-02-06 12:35:25 By : 459144091150003 View : 803 Reply : 4
 

 

No. 1



โพสกระทู้ ( 3 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ขออัพครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-02-06 18:36:39 By : 459144091150003
 


 

No. 2



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


Code (PHP)
<?php

$url = 'https://www.facebook.com/pg/NAMEPAGE/photos/?tab=album&album_id=326294964442752';


echo 'URL: ' . $url . '<br>' . "\n";

var_dump(getAlbumId($url));

echo '<br>'."\n";


function getAlbumId($url) {
    $parsed_query = parse_url($url, PHP_URL_QUERY);

    if (isset($parsed_query)) {
        parse_str($parsed_query, $queries);
        if (isset($queries) && is_array($queries) && array_key_exists('album_id', $queries)) {
            return $queries['album_id'];
        }
    }

    return '';
}


parse_url
parse_str

อยากได้ query name อะไรก็กำหนดเอา

จากโค้ดที่โพสต์ ตรง URL ที่เป็นเครื่องหมาย & มันจะถูกแปลงเป็น &; เกินมา ให้ลบเอานะครับ


ประวัติการแก้ไข
2018-02-07 03:02:34
2018-02-07 03:03:18
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-02-07 03:01:55 By : mr.v
 

 

No. 3



โพสกระทู้ ( 3 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 2 เขียนโดย : mr.v เมื่อวันที่ 2018-02-07 03:01:55
รายละเอียดของการตอบ ::
ขอสอบถามเพิ่มเติมนะครับ
คือสคิป 2 ตัวนี้ฟังก์ชั่นเดียวกันหมดครับต่างกันแค่ตรง preg_match('/https:\/\/(www.)?facebook\.com\/pg\/([a-zA-Z0-9_.\- ]*)\/photos\/\?tab=album&album_id=([a-zA-Z0-9_\-]*)/i', $url, $tmp); แต่สคลิปตัว Album กลับใช้งานไม่ได้ ทั้งๆที่ก็ต่างกันแค่โครงสร้างลิงค์ preg_match

คือว่าผมอยากทราบว่ามันมาจากสาเหตุอะไรครับ ทำไมโครงสร้างสคลิปเหมือนกันต่างกันแค่ลิงค์แต่กลับ preg_match แล้วใช้งานไม่ได้ครับ.. ลองทำมาสามวันละครับงงมาก (เวลา preg_match('/([0-9]*)/i',$url, $tmp);เก็บแต่ไอดีอย่างเดียวใช้งานได้ครับ แต่พอจะใช้ลิงค์เต็มแล้วจะเลือกเก็บคำจากวงเล็บกลับไม่ได้ครับ)

Code (PHP)

ลิงที่เรียก : https://www.facebook.com/pg/PAGENAME/photos/?tab=album&album_id=331249353947313

    if(empty($title) || empty($url)){
        $msg = '<div class="msg"><div class="error">'.$lang['b_25'].'</div></div>';
    }elseif(!preg_match('/https?:\/\/(www.)?facebook\.com\/([a-zA-Z0-9_.\- ]*)\/video\/([a-zA-Z0-9_\- ]*)\/([a-zA-Z0-9_\.\-]*)\/([a-zA-Z0-9_\-]*)/i', $url)){
        $msg = '<div class="msg"><div class="error">'.$lang['fbpv_13'].'</div></div>';
    }else{
        function getAlbumId($url) {
            preg_match('/https:\/\/(www.)?facebook\.com\/pg\/([a-zA-Z0-9_.\- ]*)\/photos\/\?tab=album&album_id=([a-zA-Z0-9_\-]*)/i', $url, $tmp);
            return isset($tmp[3]) ? $tmp[3] : false;  
        }
 
        $albumid = getAlbumId($url);      

        if(!$albumid){
            $msg = '<div class="msg"><div class="error">'.$lang['fbpa_13'].'</div></div>';
        }elseif($db->QueryGetNumRows("SELECT * FROM `fb_album_page` WHERE `pa_id`='".$albumid."'") > 0){
            $msg = '<div class="msg"><div class="error">'.$lang['fbpa_05'].'</div></div>';
        }else{
			function get_album($id){
				global $site;
				$url = get_data('https://graph.facebook.com/'.$id.'?fields=picture&access_token='.$site['fb_app_id'].'|'.$site['fb_app_secret']);
				$result = json_decode($url, true);
				return $result['picture'];
			}

			$img = get_album($albumid);
			if(empty($img)){
				$msg = '<div class="msg"><div class="error">'.$lang['fbpa_01'].'</div></div>';
			}else{
				$db->Query("INSERT INTO `fb_album_page` (user, pa_id, url, title, img, max_clicks, daily_clicks, cpc, country, sex) VALUES('".$data['id']."', '".$albumid."', '".$url."', '".$title."', '".$img."', '".$max_clicks."', '".$daily_clicks."', '".$cpc."', '".$country."', '".$gender."') ");
				$msg = '<div class="msg"><div class="success">'.$lang['fbpa_02'].'</div></div>';
				$error = 0;
			}
		}
    }




Code (PHP)

ลิงค์ที่เรียก : https://www.facebook.com/PAGENAME/video/331249353947313

    if(empty($title) || empty($url)){
        $msg = '<div class="msg"><div class="error">'.$lang['b_25'].'</div></div>';
    }elseif(!preg_match('/https?:\/\/(www.)?facebook\.com\/([a-zA-Z0-9_.\- ]*)\/([a-zA-Z0-9_\- ]*)\/([a-zA-Z0-9_\.\-]*)\/([a-zA-Z0-9_\-]*)/i', $url)){
        $msg = '<div class="msg"><div class="error">'.$lang['fbpv_13'].'</div></div>';
    }else{
        function getVideoId($url) {
            preg_match('/https?:\/\/(www.)?facebook\.com\/([a-zA-Z0-9_.\- ]*)\/videos\/([0-9]*)/i', $url, $tmp);
            return isset($tmp[3]) ? $tmp[3] : false;  
        }

        $vid = getVideoId($url);      

        if(!$vid){
            $msg = '<div class="msg"><div class="error">'.$lang['fbpv_13'].'</div></div>';
        }elseif($db->QueryGetNumRows("SELECT * FROM `fb_videos` WHERE `v_id`='".$vid."'") > 0){
            $msg = '<div class="msg"><div class="error">'.$lang['fbpv_05'].'</div></div>';
        }else{
			function get_video($id){
				global $site;
				$url = get_data('https://graph.facebook.com/'.$id.'?fields=picture&access_token='.$site['fb_app_id'].'|'.$site['fb_app_secret']);
				$result = json_decode($url, true);
				return $result['picture'];
			}

			$img = get_video($vid);
			if(empty($img)){
				$msg = '<div class="msg"><div class="error">'.$lang['fbpv_01'].'</div></div>';
			}else{
				$db->Query("INSERT INTO `fb_videos` (user, v_id, url, title, img, max_clicks, daily_clicks, cpc, country, sex) VALUES('".$data['id']."', '".$vid."', '".$url."', '".$title."', '".$img."', '".$max_clicks."', '".$daily_clicks."', '".$cpc."', '".$country."', '".$gender."') ");
				$msg = '<div class="msg"><div class="success">'.$lang['fbpv_02'].'</div></div>';
				$error = 0;
			}
		}
    }





ประวัติการแก้ไข
2018-02-10 15:14:09
2018-02-10 15:16:04
2018-02-10 15:20:45
2018-02-10 15:21:45
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-02-10 15:12:52 By : 459144091150003
 


 

No. 4



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


ใช้ parse_url & parse_str อย่างตัวอย่างที่ทำให้ก็ดีแล้ว ง่ายกว่ายืดหยุ่นกว่าและน่าจะไวกว่าด้วย
preg_match function แบบที่คุณทำถ้ากำหนด pattern ไม่ดีไม่ยืดหยุ่นพอ เจออักขระต่างกันแค่ตัวเดียวก็เดี้ยงแล้วครับ จะใช้ไปทำไม
อย่างถ้าเกิด fb มันจะเพิ่ม parameter ไปใน url อีกสักอันนี่จบเห่เลยครับ.
กำหนดให้ยืดหยุ่นมากๆก็ยากกว่าอีก เจอ parse_xxx function จบง่ายเลยใช้ได้จริงด้วย.


เนื่องจาก url ของ video มันเป็น path ล้วน (/a/b/c/video/xxx) ดังนั้นมันจึงเหมาะกับการใช้ preg_match มากกว่า
แต่ url photo มันเป็น query string (/page/photo?tab=xxx&photo=xxx) มันจึงไม่คล้ายกันหรือต่างกันนิดเดียวเหมือนที่คุณว่า มันต่างกันเยอะเลยครับ.

อันนี้เป็นแบบ preg_match
Code (PHP)
<?php
$url = 'https://www.facebook.com/pg/NAMEPAGE/photos/?tab=album&album_id=326294964442752';
//$url = 'https://facebook.com/pg/NAMEPAGE/photos/?tab=album&album_id=326294964442752';

preg_match('#^(?P<protocol>.+)\:\/\/(?P<server>.+)?(?P<domain>facebook\.com|fb\.com)(?P<photos_path>.+\/photos\/)[\?](?P<query_strings>.+)$#iu', $url, $matches);

if (isset($matches)) {
    var_dump($matches);
}

echo "<br>\n";

if (isset($matches) && is_array($matches) && array_key_exists('query_strings', $matches)) {
    $query_strings = htmlspecialchars_decode($matches['query_strings']);
    echo 'query strings: ' . $query_strings.'<br>'."\n";
    preg_match('#album_id\=(?P<value>.+)(\&)?#iu', $query_strings, $matches_query);
    if (isset($matches_query) && is_array($matches_query) && array_key_exists('value', $matches_query)) {
        echo $matches_query['value'];
    }
}


แต่ว่าผมใช้วิธีแกะเอาส่วนต่างๆของ url ออกมาแล้วรวบ query string เป็นอันเดียวแทนที่จะเจาะเข้าไปโดยใช้ pattern เนื่องจากมันจะเน่าได้ถ้าเจอเพิ่มหรือลด query string เข้าให้.
หรือถ้าเจอ url ที่แปลกไปเช่น fb.com/page/photo?album_id=xxx เลยแทนที่จะเจอ ?tab ก่อน ก็จบเห่เหมือนกัน เลยใช้แยกแบบนี้จะยืดหยุ่นมากกว่า.
พอได้มาเป็น string ก้อนเดียวแล้ว ตัวอย่างเช่น tab=album&album_id=326294964442752 ก็เอามา pregmatch name=value ต่อไป


ประวัติการแก้ไข
2018-02-10 23:37:31
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-02-10 23:07:17 By : mr.v
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : จะ preg_math เก็บค่าลิงค์ album_id จากลิงค์นี้ยังไงครับ https://www.facebook.com/pg/PAGENAME/photos/?tab=album&album_id=326294964442752
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่