2009-11-26 47 views
7

Tôi đang cố gắng tìm từ khóa tìm kiếm từ url liên kết giới thiệu. Hiện tại, tôi đang sử dụng mã sau cho các url của Google. Nhưng đôi khi nó không hoạt động ...Lấy từ khóa từ url giới thiệu (công cụ tìm kiếm) bằng cách sử dụng PHP

$query_get = "(q|p)"; 
$referrer = "http://www.google.com/search?hl=en&q=learn+php+2&client=firefox"; 
preg_match('/[?&]'.$query_get.'=(.*?)[&]/',$referrer,$search_keyword); 

Có cách nào khác/dọn dẹp/làm việc để thực hiện việc này không?

Cảm ơn bạn, Prasad

Trả lời

14

Nếu bạn đang sử dụng PHP5 hãy nhìn vào http://php.net/parse_urlhttp://php.net/parse_str

Ví dụ:

 

// The referrer 
$referrer = 'http://www.google.com/search?hl=en&q=learn+php+2&client=firefox'; 

// Parse the URL into an array 
$parsed = parse_url($referrer, PHP_URL_QUERY); 

// Parse the query string into an array 
parse_str($parsed, $query); 

// Output the result 
echo $query['q']; 
+0

Cảm ơn bạn đã trả lời nhanh chóng ... – pnm123

+0

Không có vấn đề, nếu câu hỏi của bạn được trả lời vui lòng nhấp vào kiểm tra dưới câu trả lời chính xác để mọi người đều biết nó được trả lời. – William

+0

PHP_URL_QUERY không hoạt động như "ajax'd" google mới sử dụng '#' để tách biệt miền khỏi chuỗi truy vấn chứ không phải là '?'. Vì vậy, bạn nhận được một mảng trống - một công việc xung quanh có thể là tìm và thay thế phiên bản đầu tiên của '#' thành '?' trong url trước khi xử lý –

0
$query = parse_url($request, PHP_URL_QUERY); 
+1

Đã cập nhật bài đăng của tôi để thêm tham số thứ hai. Tôi đã hy vọng anh ta tra cứu phương pháp để xem nó hoạt động như thế nào nhưng cũng tốt. – William

1

Có chuỗi truy vấn khác nhau trên tìm kiếm khác nhau động cơ. Sau khi thử phương pháp của Wiliam, tôi đã tìm ra phương pháp của riêng mình. (Bởi vì, Yahoo đang sử dụng 'p', nhưng đôi khi 'q')

$referrer = "http://search.yahoo.com/search?p=www.stack+overflow%2Ccom&ei=utf-8&fr=slv8-msgr&xargs=0&pstart=1&b=61&xa=nSFc5KjbV2gQCZejYJqWdQ--,1259335755"; 
$referrer_query = parse_url($referrer); 
$referrer_query = $referrer_query['query']; 
$q = "[q|p]"; //Yahoo uses both query strings, I am using switch() for each search engine 
preg_match('/'.$q.'=(.*?)&/',$referrer,$keyword); 
$keyword = urldecode($keyword[1]); 
echo $keyword; //Outputs "www.stack overflow,com" 

Cảm ơn bạn, Prasad

+0

Trong ví dụ của tôi, bạn cũng có thể kiểm tra xem có phải mảng q hoặc p của mảng hay không và nếu có thì thay vì giá trị kia. Thành thật mà nói, tôi khuyên bạn nên kiểm tra tên miền nó đến từ và làm việc với dữ liệu dựa trên đó. Kể từ bây giờ, bất kỳ ai đến từ BẤT CỨ trang web có "q" hoặc "p" sẽ trông giống như từ Google/Yahoo. – William

+0

Để ngăn chặn điều đó, tôi đang sử dụng >>> nếu (preg_match ('/ [\.\ /] (google | yahoo | bing | geegain | mywebsearch | yêu cầu | alltheweb) \. [az \.] {2,5} [\ /]/i ', $ referrer, $ search_engine)) {<<< – pnm123

+0

giải pháp pnm123 tìm thấy bất kỳ phần tử nào là p = có thể bao gồm cp = - url google nào có, sẽ không dẫn đến chuỗi truy vấn cho từ khóa. –

0

Cái này nên làm việc Đối với Google, Bing và đôi khi, Yahoo Search:

if(isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']) { 
    $query = getSeQuery($_SERVER['HTTP_REFERER']); 
    echo $query; 
} else { 
    echo "I think they spelled REFERER wrong? Anyways, your browser says you don't have one."; 
} 



function getSeQuery($url = false) { 
    $segments = parse_url($url); 
    $keywords = null; 
    if($query = isset($segments['query']) ? $segments['query'] : (isset($segments['fragment']) ? $segments['fragment'] : null)) { 
    parse_str($query, $segments); 
    $keywords = isset($segments['q']) ? $segments['q'] : (isset($segments['p']) ? $segments['p'] : null); 
    } 
    return $keywords; 
} 
1

Để bổ sung các câu trả lời khác, hãy lưu ý rằng tham số chuỗi truy vấn chứa cụm từ tìm kiếm thay đổi theo nhà cung cấp dịch vụ tìm kiếm. Đoạn này của PHP cho thấy các thông số đúng để sử dụng:

$search_engines = array(
    'q' => 'alltheweb|aol|ask|ask|bing|google', 
    'p' => 'yahoo', 
    'wd' => 'baidu', 
    'text' => 'yandex' 
); 

Nguồn: http://betterwp.net/wordpress-tips/get-search-keywords-from-referrer/

1
<?php 
class GET_HOST_KEYWORD 
{ 
    public function get_host_and_keyword($_url) { 
     $p = $q = ""; 
     $chunk_url = parse_url($_url); 
     $_data["host"] = ($chunk_url['host'])?$chunk_url['host']:''; 
     parse_str($chunk_url['query']); 
     $_data["keyword"] = ($p)?$p:(($q)?$q:''); 
     return $_data; 
    } 
}  
// Sample Example 
$obj = new GET_HOST_KEYWORD(); 
print_r($obj->get_host_and_keyword('http://www.google.co.in/search?sourceid=chrome&ie=UTF-&q=hire php php programmer')); 

// sample output 
//Array 
//(
// [host] => www.google.co.in 
// [keyword] => hire php php programmer 
//) 

// $search_engines = array(
// 'q' => 'alltheweb|aol|ask|ask|bing|google', 
// 'p' => 'yahoo', 
// 'wd' => 'baidu', 
// 'text' => 'yandex' 
//); 


?> 
0

Tôi tin google và yahoo đã cập nhật thuật toán của họ để loại trừ các từ khóa tìm kiếm và params khác trong url đó không thể đã nhận được bằng phương pháp http_referrer.

Vui lòng cho tôi biết nếu các đề xuất ở trên vẫn sẽ cung cấp từ khóa tìm kiếm.

Điều tôi hiện đang nhận được ở dưới đây khi sử dụng http liên kết giới thiệu ở cuối trang web của tôi.

từ google: https://www.google.co.in/ từ yahoo: https://in.yahoo.com/

Ref: https://webmasters.googleblog.com/2012/03/upcoming-changes-in-googles-http.html

Các vấn đề liên quan