2015-04-17 2 views
20

У меня есть этот код, чтобы рассчитать все доли социальных сайтов в моих сообщениях. Проблема с кодом - постоянная ссылка статична.хранить PERMALINK в переменной PHP

Если вы заметили, я хранится постоянную ссылку в $myurl переменной с помощью get_permalink();, проблема с кодом является один раз изменить ссылку «http://www.bendaggers.com/how-to-write-a-killer-resume-that-lands-an-interview/», это дает мне тонны ошибок, таких как:

file_get_contents(http://graph.facebook.com/?id= $myurl): failed to open stream: HTTP request failed!

Вот мой код:

$myurl = get_permalink(); 
$url = urlencode($url); 

$facebook_like_share_count = function ($url) { 
    $api = file_get_contents('http://graph.facebook.com/?id=' . $url); 
    $count = json_decode($api); 
    return $count->shares; 
}; 


$twitter_tweet_count = function ($url) { 
    $api = file_get_contents('https://cdn.api.twitter.com/1/urls/count.json?url=' . $url); 
    $count = json_decode($api); 
    return $count->count; 
}; 


$pinterest_pins = function ($url) { 
    $api = file_get_contents('http://api.pinterest.com/v1/urls/count.json?callback%20&url=' . $url); 
    $body = preg_replace('/^receiveCount\((.*)\)$/', '\\1', $api); 
    $count = json_decode($body); 
    return $count->count; 
}; 




echo twitter_tweet_count('http://www.bendaggers.com/how-to-write-a-killer-resume-that-lands-an-interview/'); 

echo "<br>"; 

echo facebook_like_share_count('http://www.bendaggers.com/how-to-write-a-killer-resume-that-lands-an-interview/'); 

echo "<br>"; 

echo pinterest_pins('http://www.bendaggers.com/how-to-write-a-killer-resume-that-lands-an-interview/'); 

echo "<br>"; 


?> 

Для добавления, функция get_permalink возвращает текущий URL активной страницы. Я делаю это, чтобы интегрировать его на мой сайт Wordpress и показать точное количество акций (facebook, twitter, linkedin и pinterest). Приведенный выше код не возвращает URL-адрес текущей страницы. Это статично.

+2

Если вы посмотрите на них, вам нужно будет вызывать 'urlencode()' на входе '$ url'. Поэтому '$ url = urlencode ($ url);' - поскольку он используется как параметр строки запроса в вызовах API, отправленных в 'file_get_contents()'. Однако это может быть не единственное, что вызывает проблемы. –

+1

Заметка о стиле - то, что у вас здесь, работает в большинстве версий PHP, но, похоже, сильно зависит от стиля определения функции JavaScript. Это очень чудно для PHP. Определения функций были бы более условными как «function pinterest_pins ($ url) {...}', а затем вызывались без '' 'как просто' pinterest_pins '(' http: // ... '); 'вместо назначения функции для переменных и вызов через переменные функции. –

+1

Странная вещь об этом коде, если я использовал echo twitter_tweet_count («google.com») ;, echo facebook_like_share_count («google.com»), он отлично работает. Ошибки будут отображаться, если я изменил статическую ссылку на $ myurl –

ответ

3

Это выглядит как несколько простых оплошностей для меня.

Первый заключается в том, что $url кодирует переменную, которая не существует. В настоящее время у вас есть

$myurl = get_permalink(); 
$url = urlencode($url); 

... когда это должно быть, вероятно,

$myurl = get_permalink(); 
$url = urlencode($myurl); 

Во-вторых, нет никаких функций, определенных по имени twitter_tweet_count, facebook_like_share_count или pinterest_pins. Вместо этого вы назначили их переменным, используя анонимные функции, чтобы определить их значение.

По существу, вы должны быть в состоянии изменить этот

echo twitter_tweet_count('http://www.bendaggers.com/how-to-write-a-killer-resume-that-lands-an-interview/'); 

... к этому

echo $twitter_tweet_count('http://www.bendaggers.com/how-to-write-a-killer-resume-that-lands-an-interview/'); 

... с той лишь разницей, $ до twitter_tweet_count текста.

Как только это будет фиксированной, вы должны в дальнейшем иметь возможность комбинировать оба исправления, с конечным продуктом ищет что-то подобное (с использованием динамического значения $url):

<?php 

$myurl = get_permalink(); 
$url = urlencode($myurl); 

$facebook_like_share_count = function ($url) { 
    $api = file_get_contents('http://graph.facebook.com/?id=' . $url); 
    $count = json_decode($api); 
    return $count->shares; 
}; 

$twitter_tweet_count = function ($url) { 
    $api = file_get_contents('https://cdn.api.twitter.com/1/urls/count.json?url=' . $url); 
    $count = json_decode($api); 
    return $count->count; 
}; 

$pinterest_pins = function ($url) { 
    $api = file_get_contents('http://api.pinterest.com/v1/urls/count.json?callback%20&url=' . $url); 
    $body = preg_replace('/^receiveCount\((.*)\)$/', '\\1', $api); 
    $count = json_decode($body); 
    return $count->count; 
}; 

echo $twitter_tweet_count($url); 

echo "<br>"; 

echo $facebook_like_share_count($url); 

echo "<br>"; 

echo $pinterest_pins($url); 

echo "<br>"; 

?> 
+0

Я получил эту ошибку: Предупреждение: file_get_contents (http://graph.facebook.com/?id=http%3A%2F%2Falphaomega.bendaggers.com%2F2014%2F10%2F25%2Flegendary-moments-of-barney-stinson%2F): не удалось open stream: HTTP-запрос не удался! HTTP/1.1 403 Запрещено в –

2

Прочитать код последней ошибки, которую вы дали в комментариях : 403 (доступ использованы без разрешения)

Так что я пошел на facebook API Docs и нашел это: Link to docs

Its possible that one of your requested operations may throw an error. This could be because, for example, you don't have permission to perform the requested operation.

I n пример, следующий за этой цитатой, мы можем увидеть код ответа 403 для запроса.

Ну, у меня есть доступ к этой странице из моего навигатора и из функции PHP file_get_contents. Возможно, вы попали в черный список или есть некоторые квоты ... Если проблема не устранена, вы должны связаться с Facebook, чтобы узнать, почему ваш сервер не имеет доступа к этой информации.

{ 
    "id": "http://alphaomega.bendaggers.com/2014/10/25/legendary-moments-of-barney-stinson/", 
    "shares": 4 
} 

Надежда его помогла :)

0

Есть два способа избежать этой ошибки.

первый метод

Если вы открываете URI с помощью специальных символов, таких как пробелы, вы должны кодировать URI с UrlEncode().

urlencode - This function is convenient when encoding a string to be used in a query part of a URL, as a convenient way to pass variables to the next page. 

Заканчивать код ниже

$myurl = get_permalink(); 
$url = urlencode($url); 

2 метода

file_get_contents() использует fopen() оберток, поэтому он ограничен доступ к URL, через allow_url_fopen опции в php.ini.

Should I allow 'allow_url_fopen' in PHP?

третий метод

Вы можете попробовать завиток. Попробуйте это link.

Смежные вопросы