  | 
              
	              
	                
  
    
	 
        จะ preg_math เก็บค่าลิงค์ album_id จากลิงค์นี้ยังไงครับ https://www.facebook.com/pg/PAGENAME/photos/?tab=album&album_id=326294964442752     | 
   
  
    |   | 
   
 
 
 
              
  
          
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 ขออัพครับ                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-02-06 18:36:39 | 
                        By :
                            459144091150003 | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 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 | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                   ตอบความคิดเห็นที่ : 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 | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 ใช้ 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 | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
      		  
	
     | 
   
 
                 |