PHPを使用して(検索エンジン)リファラーURLからキーワードを取得する

StackOverflow https://stackoverflow.com/questions/1805296

  •  05-07-2019
  •  | 
  •  

質問

リファラーURLから検索キーワードを取得しようとしています。現在、GoogleのURLには次のコードを使用しています。しかし、時々それは動作していません...

$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);

これを行う別の/クリーン/作業方法はありますか?

ありがとう、 プラサード

役に立ちましたか?

解決

PHP5を使用している場合は、 http://php.net/parse_url および http://php.net/parse_str

例:

// 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'];

他のヒント

異なる検索エンジンには異なるクエリ文字列があります。ウィリアムの方法を試した後、私は自分の方法を見つけました。 (なぜなら、Yahoo'sは 'p'を使用していますが、時々 '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"

ありがとう、 プラサード

他の回答を補足するために、検索語を含むクエリ文字列パラメーターは検索プロバイダーによって異なることに注意してください。このPHPのスニペットは、使用する正しいパラメーターを示しています。

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

出典: http://betterwp.net/wordpress-tips / get-search-keywords-from-referrer /

<?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'
//);


?>
$query = parse_url($request, PHP_URL_QUERY);

これは、Google、Bing、場合によってはYahoo Searchで動作するはずです:

if( isset(

これは、Google、Bing、場合によってはYahoo Searchで動作するはずです:

<*>SERVER['HTTP_REFERER']) &&

これは、Google、Bing、場合によってはYahoo Searchで動作するはずです:

<*>SERVER['HTTP_REFERER']) { $query = getSeQuery(

これは、Google、Bing、場合によってはYahoo Searchで動作するはずです:

<*>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; }

googleとyahooはアルゴリズムを更新して、http_referrerメソッドを使用して受信できないURL内の検索キーワードとその他のパラメーターを除外したと思います。

上記の推奨事項が引き続き検索キーワードを提供するかどうかをお知らせください。

ウェブサイトの最後でhttpリファラーを使用している場合、現在受け取っているものは以下のとおりです。

googleから: https://www.google.co.in/ yahooから: https://in.yahoo.com/

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top