|
|
|
จะ 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 01
|