3

いくつかのphpヘルプを含む可能性のあるdrupal7の質問があります。フィールドにマッピングしているGoogleアラートからRSSフィードを作成しました。適切なURLサーバークエリをフィードのURLに添付して、ページピーカーのスクリーンショットを作成するフィールドフォーマッターを配置したリンクモジュールフィールドを除いて、すべてのフィールドへのマッピングに成功しました。Feedsは、アイテムのURL(リンク)を取得してフィールドに正しく入力することでその役割を果たしています。以下が引き続き発生するため、pagepeekerまたはlinkモジュールのいずれかに問題があります。

要点をまとめると-

Googleアラートフィード->リンクモジュールフィールド->pagepeekerスクリーンショットフォーマッター

これがエラーです

グーグルアラートが提供するURLは

http://www.google.com/url?sa=X&q=http://www.beautyjunkiesunite.com/WP/2012/05/30/whats-new-anastasia-beverly-hills-lash-genius/&ct= ga&cad = CAcQARgAIAEoATAAOABA3t-Y_gRIAlgBYgVlbi1VUw&cd = F7w9TwL-6ao&usg = AFQjCNG2rbJCENvRR2_k6pL9RntjP66Rvg

リンクが表示されると、次のようになります。

http://pagepeeker.com/thumbs.php?size=m&url=www.google.com/url

URLをURLでカットし、残りのURLを取得しません。

pagepeekerがURLを解析するために使用するコードは次のとおりです。

<?php

function _pagepeeker_format_url($url, $domain_only = FALSE) {
if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) {
return FALSE;
}

// try to parse the url
$parsed_url = parse_url($url);
if (!empty($parsed_url)) {
  $host = (!empty($parsed_url['host'])) ? $parsed_url['host'] : '';
  $port = (!empty($parsed_url['port'])) ? ':' . $parsed_url['port'] : '';
  $path = (!empty($parsed_url['path'])) ? $parsed_url['path'] : '';
  $query = (!empty($parsed_url['query'])) ? '?' . $parsed_url['query'] : '';
  $fragment = (!empty($parsed_url['fragment'])) ? '#' . $parsed_url['fragment'] : '';

if ($domain_only) {
  return $host . $port;
}
else {
  return $host . $port . $path . $query . $fragment;
}
}

return FALSE;
}

これが問題でしょうか?

なんらかの形で明確にできることを教えてください。

必要なのは、切り捨てられたURLだけでなく、URL全体が処理されることです。

ありがとう !

4

1 に答える 1

1

私はここSOまたはdrupalSOページで非常によく似た質問を見ましたが、それを見つけることができなかったので、ここで再び「私のやり方」の答えを書いています。

<?php


function _pagepeeker_format_url($url, $domain_only = FALSE) {
if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) {
return FALSE;
}

//$url = 'http://www.google.com/url?sa=X&q=http://www.beautyjunkiesunite.com/WP/2012/05/30/whats-new-anastasia-beverly-hills-lash-genius/&ct=ga&cad=CAcQARgAIAEoATAAOABA3t-Y_gRIAlgBYgVlbi1VUw&cd=F7w9TwL-6ao&usg=AFQjCNG2rbJCENvRR2_k6pL9RntjP66Rvg';
// Now we use parse_url to split the url to an array with url parts.
$parsed_url = parse_url($url);
// $parsed_url['query'] is 'sa=X&q=http://www.beautyjunkiesunite.com/WP/2012/05/30/whats-new-anastasia-beverly-hills-lash-genius/&ct=ga&cad=CAcQARgAIAEoATAAOABA3t-Y_gRIAlgBYgVlbi1VUw&cd=F7w9TwL-6ao&usg=AFQjCNG2rbJCENvRR2_k6pL9RntjP66Rvg'
// ";" can also be used to separate params. But & is the usual one so using it.
$queryParts = explode('&', $parsed_url['query']);

    $params = array();
    foreach ($queryParts as $param) {
        $item = explode('=', $param);
        // sa = X, etc.
        $params[$item[0]] = $item[1];
    }
//$params is now an array with query parts.
// $params['sa'] = 'X' , q = 'http://www.beautyjunkiesunite.com/WP/2012/05/30/whats-new-anastasia-beverly-hills-lash-genius', etc.

if ($domain_only){
$new_url_parsts = parse_url($params['q']);
return $new_url_parts['host'];
}
else{
return $params['q'];
}
于 2012-05-31T22:24:49.380 に答える