Хранить 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): не удалось открытый поток: запрос HTTP не выполнен!
Здесь мой код:
$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-адрес текущей страницы. Это статично.
Ответы
Ответ 1
Это выглядит как несколько простых оплошностей для меня.
Во-первых, $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>";
?>
Ответ 2
Прочтите последний код ошибки, который вы указали в комментариях: 403 (запрет доступа)
Итак, я пошел в API-интерфейс facebook API и нашел это: Ссылка на документы
Возможно, что одна из ваших запрошенных операций может вызвать ошибку. Это может быть связано с тем, что, например, у вас нет разрешения на выполнить запрошенную операцию.
В примере, следующем за этой цитатой, мы можем увидеть код ответа 403 для запроса.
Ну, у меня есть доступ к этой странице из моего навигатора и из функции PHP file_get_contents. Возможно, вы попали в черный список или есть некоторые квоты... Если проблема не устранена, вы должны связаться с Facebook, чтобы узнать, почему ваш сервер не имеет доступа к этой информации.
{
"id": "http://alphaomega.bendaggers.com/2014/10/25/legendary-moments-of-barney-stinson/",
"shares": 4
}
Надеюсь, что это помогло:)
Ответ 3
Существует два способа избежать этой ошибки.
1-й метод
Если вы открываете 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);
Второй метод
file_get_contents()
использует обертки fopen()
, поэтому он ограничен доступом к URL-адресам через опцию allow_url_fopen
в php.ini
.
Должен ли я разрешать 'allow_url_fopen' в PHP?
Третий метод
Вы можете попробовать закрутить. Попробуйте ссылка.