¿Cuenta las “participaciones” de facebook, twitter y g+ y guárdalas en la base de datos?

5 minutos de lectura

avatar de usuario
Ilja

Estaba trabajando en mi lado de Word Press y se me ocurrió esta idea. En lugar de implementar una función “Me gusta/Favoritos” para determinar los artículos principales, me gustaría contar juntos cuántos compartidos de Facebook, tweets y +1 recibió ese artículo y, una vez que se hayan contado todos juntos, almacenarlos en la base de datos (con el artículo correspondiente) , por lo que puedo elegir los mejores artículos seleccionando los que tienen más compartidos, tweets y +1. También necesitaría actualizar la base de datos cada vez que el usuario haga clic en cualquiera de los botones de Facebook, Twitter o G+.

¿Se puede lograr esto dentro de Word Press y mediante el uso de sus api?

avatar de usuario
akashivskyy

Esto no es tan simple como parece.

Hay una gran esencia en GitHub con todas las API que desea implementar: Obtenga los recuentos compartidos de varias API.

Puede conectarse a estos servidores y obtener datos usando jQuery y 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
        }
    })
}

Entonces, puede reemplazar // do something with it líneas con otra solicitud AJAX a tu blog. Deberá escribir un complemento para manejar esta solicitud y guardar los datos en el archivo $wpdb. El complemento es relativamente simple:

<?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');

?>

Cuando tengas tu plugin, podemos editar // do something with it líneas en su archivo JavaScript:

  1. Para how_many_tweets() será:

    $.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. Para how_many_fb_shares() copia/pega el código de how_many_tweets() y solo cambia:

    ...
        url: "... &type=facebook ...
    ...
    
  3. Para how_many_google_pluses() haz lo mismo que con facebook:

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

Entonces tienes que de alguna manera filtra tus publicaciones usando $type y $count que le has escrito a tu $wpdb.


Tengo que irme ahora. Le he proporcionado más que una simple información sobre cómo conectarse a las API de Facebook, Twitter y Google. Espero que hagas uso de ella y logres lo que quieres lograr.

  • Esta fue una lectura interesante, gracias por la respuesta extendida, la aceptaré y le daré un premio de +50 una vez que pueda

    – Ilja

    3 de marzo de 2013 a las 0:06

  • ¡Gracias! Me alegro de poder ayudar. 🙂

    – akashivskyy

    3 de marzo de 2013 a las 17:10

  • @akashivskyy Tengo una pregunta para usted: quiero obtener los feeds de los usuarios y publicarlos en las redes sociales y almacenarlos en la base de datos utilizando la API. Por favor ayúdame a resolver esta dificultad.

    – Pradosh Mukhopadhayay

    28 de noviembre de 2014 a las 9:16

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad