2013-02-28 8 views
5

Pracowałem nad moją stroną Word Press i otrzymałem ten pomysł. Zamiast implementować funkcję "Like/Fav" w celu określenia najważniejszych artykułów, chciałbym zamiast tego zliczyć, ile akcji Facebook, tweetów i +1 otrzymanych artykułów, a gdy wszystkie zostaną zliczone, przechowywać je w bazie danych (z odpowiednim artykułem) , więc mogę wybrać najlepsze artykuły, wybierając te z większością udziałów, tweetami i +1. Chciałbym również zaktualizować bazę danych za każdym razem, gdy użytkownik kliknie na przycisk Facebook, Twitter lub G +.Policz facebook, twitter i g + "akcje" i przechowuj je w bazie danych?

Czy jest to możliwe w programie Word Press i przy użyciu api?

Odpowiedz

8

To nie jest takie proste, jak to wygląda.

Na GitHubie jest świetny sens z wszystkimi API, które chcesz zaimplementować: Get the share counts from various APIs.

można podłączyć do tych serwerów i pobrać dane przy użyciu jQuery i AJAX:

function how_many_tweets(url, post_id) { 
    var api_url = "http://cdn.api.twitter.com/1/urls/count.json"; 
    var just_url = url || document.location.href; 
    $.ajax({ 
     url: api_url + "?callback=?&url=" + just_url, 
     dataType: 'json', 
     success: function(data) { 
      var tweets_count = data.count; 
      // do something with it 
     } 
    }); 
} 

function how_many_fb_shares(url, post_id) { 
    var api_url = "http://api.facebook.com/restserver.php"; 
    var just_url = url || document.location.href; 
    $.ajax({ 
     url: api_url + "?method=links.getStats&format=json&urls=" + just_url, 
     dataType: 'json', 
     success: function(data) { 
      var shares_count = data[0].total_count; 
      // do something with it 
     } 
    }); 
}; 

function how_many_google_pluses(url, api_key, post_id) { 
    var api_url = "https://clients6.google.com/rpc?key=" + api_key; 
    var just_url = url || document.location.href; 
    $.ajax({ 
     url: api_url, 
     dataType: 'json', 
     contentType: 'application/json', 
     type: 'POST', 
     processData: false, 
     data: '[{"method":"pos.plusones.get","id":"p","params":{"nolog":true,"id":"' + just_url + '","source":"widget","userId":"@viewer","groupId":"@self"},"jsonrpc":"2.0","key":"p","apiVersion":"v1"}]', 
     success: function(data) { 
      var google_pluses = data.result.metadata.globalCounts.count; 
      // do something with it 
     } 
    }) 
} 

Następnie można zastąpić // do something with it linii z inną AJAX żądanie do swojego bloga. Będziesz musiał napisać wtyczkę, aby obsłużyć to żądanie i zapisać dane w $ wpdb. Wtyczka jest stosunkowo prosta:

<?php 

/* 
    Plugin Name: Save Share Count Request Plugin 
    Plugin URI: http://yourdomain.com/ 
    Description: This plugin catches 'save share count' requests and updates the database. 
    Version: 1.0 

*/ 

// check if request is a 'save share count' request 
// i'm using sscrp_ prefix just not to redefine another function 
// sscrp_ means SaveShareCountRequestPlugin_ 
function sscrp_is_save_share_count_request() { 
    if(isset($_GET['_save_share_count_request'])) return true; 
    else return false; 
} 

// save the count in database 
function sscrp_save_share_count_in_wpdb($type, $count, $post_id) { 

    // $count is your new count for the post with $post_id 
    // $type is your social media type (can be e.g.: 'twitter', 'facebook', 'googleplus') 
    // $post_id is post's id 

    global $wpdb; 

    // create a $wpdb query and save $post_id's $count for $type. 
    // i will not show how to do it here, you have to work a little bit 

    // return true or false, depending on query success. 

    return false; 
} 

// catches the request, saves count and responds 
function sscrp_catch_save_share_count_request() { 
    if(sscrp_is_save_share_count_request()) { 
     if(isset($_GET['type'])) { 
      $social_media_type = $_GET['type']; 
      $new_count = $_GET['value']; 
      $post_id = $_GET['post_id']; 
      if(sscrp_save_share_count_in_wpdb($social_media_type, $new_count, $post_id)) { 
       header(sprintf('Content-type: %s', 'application/json')); 
       die(json_encode(array("sscrp_saved"=>true))); 
      } else { 
       header(sprintf('Content-type: %s', 'application/json')); 
       die(json_encode(array("sscrp_saved"=>false))); 
      } 
     } else { 
      header(sprintf('Content-type: %s', 'application/json')); 
      die(json_encode(array("sscrp_saved"=>false))); 
     } 
    } 
} 

// catch the save request just after wp is loaded 
add_action('wp_loaded', 'sscrp_catch_save_share_count_request'); 

?> 

Kiedy masz wtyczki, możemy edytować // do something with it linie w pliku javascript:

  1. Dla how_many_tweets() będzie:

    $.ajax({ 
        url: "http://yourdomain.com/path_to_your_wp_installation/?_save_share_count_request=1&type=twitter&value=" + tweets_count + "&post_id=" + post_id, 
        dataType: 'json', 
        success: function(data) { 
         var saved = data.sscrp_saved; 
         if(saved) { 
          // done! 
         } else { 
          // oh crap, an error occured 
         } 
        } 
    }); 
    
  2. Dla how_many_fb_shares() skopiuj/wklej kod z how_many_tweets() i po prostu zmień:

    ... 
        url: "... &type=facebook ... 
    ... 
    
  3. Dla how_many_google_pluses() tak samo jak z Facebook:

    ... 
        url: "... &type=googleplus ... 
    ... 
    

Następnie trzeba jakoś filtrować wiadomości za pomocą $type i $count, które zostały napisane na swojej $wpdb.


Muszę już iść. Dostarczyłem Ci więcej niż tylko prostych informacji o łączeniu się z API Facebooka, Twittera i Google'a. Mam nadzieję, że wykorzystacie to i osiągniecie to, co chcecie osiągnąć.

+1

To była ciekawa lektura, dziękuję za przedłużoną odpowiedź, przyjmuję ją i dam ci +50 nagrodę, gdy tylko mogę – Ilja

+1

Dzięki! Cieszę się, że mogłem pomóc. :) – akashivskyy

+0

@akashivskyy Mam pytanie do ciebie, że chcę pobrać kanały użytkownika i post z mediów społecznościowych i przechowywać do bazy danych za pomocą tam API. Pomóż mi rozwiązać tę trudność. – Apache