2015-04-17 22 views
20

içinde saklıyorum Bu kodun, yazılarımdaki tüm sosyal site paylaşımlarını saymak için kullanıyorum. Koddaki sorun, kalıcıdır.Bir PHP değişkeni içinde PERMALINK dosyasını

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

İşte: Ben bağlantıyı "http://www.bendaggers.com/how-to-write-a-killer-resume-that-lands-an-interview/" değiştirdikten sonra

fark ederse, ben get_permalink(); kullanılarak $myurl değişkeninde kalıcı bağlantı saklanan, koduyla sorun şu ki, bana gibi hataların ton verir kodum:

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


?> 

eklemek için get_permalink fonksiyonu aktif sayfanın geçerli URL'sini döndürür. Bunu wordpress web siteme entegre etmek ve paylaşımların tam sayısını (facebook, twitter, linkedin ve pinterest) göstermek için yapıyorum. Yukarıdaki kod, geçerli sayfanın URL'sini döndürmez. Statik.

+2

Bunlara bakarak, '$ url 'girdisinde' urlencode() 'ı çağırmanız gerektiği görünecektir. Yani $ url = urlencode ($ url); '- file_get_contents()' öğesine gönderilen API çağrılarında bir sorgu dizesi parametresi olarak kullanıldığından. Bu sorunlara neden olan tek şey olmayabilir. –

+1

Tarzda bir not - burada bulunan şey çoğu PHP sürümünde çalışır, ancak JavaScript işlev tanımı stilinden büyük ölçüde etkilenir. PHP için oldukça yabancı. İşlev tanımları, 'function pinterest_pins ($ url) {...}' işleviyle daha geleneksel olabilir ve daha sonra '$ 'olarak basitçe' pinterest_pins (' http: // ... '); değişkenlere fonksiyonlar ve değişken fonksiyonlar aracılığıyla çağırır. –

+1

Eğer echo twitter_tweet_count ("google.com"), echo facebook_like_share_count ("google.com); echo kullanılırsa, bu kod hakkında garip şey, mükemmel çalışıyor. Eğer statik bağlantı $ myurl değiştirdiyse hatalar görüntülenecektir –

cevap

3

Bu, benim için birkaç basit gözetime benziyor.

Birincisi, $url'un mevcut olmayan bir değişkeni kodlamasıdır. Şu anda muhtemelen ikinci twitter_tweet_count, facebook_like_share_count veya pinterest_pins adında tanımlı hiçbir işlevleri olmasıdır

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

olması gerekirken ...

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

var. Bunun yerine, değerlerini belirlemek için bunları anonim işlevler kullanarak değişkenlere atadınız.

Esasen sen tek fark twitter_tweet_count metinden önce $ olmak ... Bu

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

için ... Bu

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

değiştirmek mümkün olmalıdır.

o düzeltilenekadar kez daha ileri böyle bir şey ($url dinamik değeri kullanılarak) seyir nihai ürün ile, her iki düzeltmeleri birleştirmek mümkün olmalıdır:

<?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

'u kontrol edin bu hatayı aldım: Uyarı: file_get_contents (http://graph.facebook.com/?id=http%3A%2F%2Falphaomega.bendaggers.com%2F2014%2F10%2F25%2Flegendary-moments-of-barney-stinson%2F): Başarısız açık akış: HTTP isteği başarısız! HTTP/1.1 403 Yasak –

2

yorumlarınızla verdiği son hata kodunu Oku : 403 (ise yasaktır erişimi)

yüzden facebook API docs gitti ve bu bulundu: 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 Bu alıntıyı takip eden örnekte, talebe 403 yanıt kodu görebiliyoruz.

Bu sayfaya gezgimden ve PHP file_get_contents işlevinden erişebiliyorum. Yani belki kara listeye alındınız ya da bazı kotalar var ... Sorun devam ederse, sunucunuzun neden bu bilgilere erişemediğini öğrenmek için Facebook ile iletişime geçmelisiniz.

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

Umut onun yardımcı :) Bu hatayı önlemek için iki yöntem vardır

0

.

1 yöntemi

Boşluklar gibi özel karakterler içeren bir URI'yi açıyorsanız urlencode ile URI kodlamak gerekir().

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

2 yöntemle

file_get_contents() aşağıdaki kodu dışarı

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. 

Kontrol nedenle php.ini içinde allow_url_fopen seçeneği URL'leri erişmesini kısıtlanır, fopen() sarmalayıcılarını kullanır.

Should I allow 'allow_url_fopen' in PHP?

3 yöntem

Sen curl deneyebilirsiniz. Bunu link deneyin.