Tutorial: [APPS] Publicar diariamente en el muro del usuario

cicklow

Admin
Beta
Verificado con documento
Verificación en dos pasos activada
Desde
30 May 2011
Mensajes
57
Crédito(s)
1
Puntos
25.567
En este tutorial aprenderán a crear una aplicación viral, que publica automáticamente todos los días en el muro del usuario un resultado (texto, horóscopo, etc.).

No vamos a usar ningún SDK, solo código PHP y la Graph API de facebook.

En este ejemplo crearemos una aplicación de horóscopo diario, el horóscopo será leído de un archivo, ese archivo lo tendrán que actualizar ustedes diariamente, o contratar a alguien, o crear un boot que arme el horóscopo automáticamente (eso corre por su cuenta).

Desde ya usaremos MSQL para guardar el access_token del usuario, el cual nos permitirá postear diariamente en su muro.

PHP:
<?php
    //Config de tu apps
    $app_id = "TU_APP_ID";
    $app_secret = "APP_SECRET";
    $miappurl = "http://apps.facebook.com/miapps/";

    //Verificamos
    $code = $_REQUEST["code"];
    if(!$code){
        //Armamos la url con los permisos a usar!
        $dialog_url= "http://www.facebook.com/dialog/oauth?client_id=".$app_id."&redirect_uri=".urlencode($miappurl)."&scope=publish_stream,offline_access";
        echo("<script>top.location.href='".$dialog_url."'</script>");
        die();
    }else{
        //Obtenemos el access_token (nos permitira publicar en el muro)
        $token_url="https://graph.facebook.com/oauth/access_token?client_id=".$app_id."&client_secret=".$app_secret."&redirect_uri=".urlencode($miappurl)."&code=".$code;
        $response = @file_get_contents($token_url);
        $params = null;
        parse_str($response, $params);
        $access_token = $params['access_token'];

        //Obtener el uid del usuario
        $uid_url = "https://graph.facebook.com/me?fields=id,first_name&access_token=".$access_token;
        $dto = @file_get_contents($uid_url);
        $dto = json_decode($dto,true);
        $user_id = $dto['id'];
        $nombre = $dto['first_name'];

        //Nos comentamos a nuestra BD
        $dbhost = "localhost";
        $dbuser = "usuario";
        $dbpass = "password";
        $dbname = "base_de_datos";

        $dbh = mysql_connect($dbhost,$dbuser, $dbpass);
        mysql_select_db("$dbname") or die ("Error!");

        //Verificamos si el usuario ya existe!
        $SQL = @mysql_query("SELECT uid FROM usuarios_face WHERE uid='".$user_id."'");
        $ROW = @mysql_fetch_array($SQL);
        if($ROW['uid']==""){
            @mysql_query("INSERT INTO usuarios_face VALUES('".$user_id."','".$access_token."','".$nombre."','')");
        }

        //Mostramos el horoscopo
        $SIG = array('acuario','aries','capricornio','cancer','escorpio','geminis','leo','libra','piscis','sagitario','tauro','virgo');

        echo '<center>Seleccione su signo del zodiaco<br/><form action="'.$miappurl.'?code='.$code.'" target="_top" method="GET"><select name="signo">';
        foreach($SIG as $S){
            echo '<option value="'.$S.'">'.ucwords($S).'</option>';
        }
        echo '</select><br/><input type="hidden" name="code" value="'.$code.'"><input type="submit" value="Ver mi horoscopo"></form><br/>';

        if($_REQUEST['signo']!=""){
            //Guardamos el signo
            mysql_query("UPDATE usuarios_face SET signo='".$_REQUEST['signo']."' WHERE uid='".$user_id."'");
            //Mostramos el signo
            include('horos_'.$_REQUEST['signo'].'.txt');
        }
    }
?>
Ahora el cron diario (se ejecutara todos los dias a las 00hs):
PHP:
<?php
    @set_time_limit(0);

    $app_id = "TU_APP_ID";
    $app_secret = "APP_SECRET";
    $miappurl = "http://apps.facebook.com/miapps/";
    $nombreapp = "Horoscopo del dia";

    //Nos comentamos a nuestra BD
    $dbhost = "localhost";
    $dbuser = "usuario";
    $dbpass = "password";
    $dbname = "base_de_datos";

    $dbh = mysql_connect($dbhost,$dbuser, $dbpass);
    mysql_select_db("$dbname") or die ("Error!");

    $SIG = array('acuario','aries','capricornio','cancer','escorpio','geminis','leo','libra','piscis','sagitario','tauro','virgo');
    //cargamos los signos en un array, para no tener que leer el file por cada usuario, evitano cargar el server
    foreach($SIG as $S){
        $H[$S] = file_get_contents('horos_'.$S.'.txt');
    }

    //Cargamos todos los usuarios
    $SQL = @mysql_query("SELECT * FROM usuarios_face WHERE 1");
    while($ROW = @mysql_fetch_array($SQL)){
        $posteo_url = "https://graph.facebook.com/" 
            . $ROW['uid'] . "/feed?"
            . "&message="
            . "&picture=" . urlencode('http://www.miweb.com/img/'.$ROW['signo'].'.jpg')
            . "&link=" . urlencode($miappurl)
            . "&name=" . urlencode($nombreapp)
            . "&caption=" . urlencode($H[$ROW['signo']])
            . "&method=POST"
            . "&access_token=" .$ROW['access_token'];

        @file_get_contents($posteo_url);
    }

    die('Terminado');
?>
Codigo para crear la tabla en mysql
Insertar CODE, HTML o PHP:
CREATE TABLE `usuarios_face` (
`uid` DOUBLE NOT NULL ,
`access_token` TEXT NOT NULL ,
`nombre` VARCHAR( 25 ) NOT NULL ,
`signo` VARCHAR( 20 ) NOT NULL ,
INDEX ( `uid` )
) ENGINE = MYISAM ;
Esto es todo, espero que les sea de ayuda. Saludos (desde ya esto no está muy bien visto en facebook, asique es pan para hoy hambre para mañana).

También pueden pedir el email y guardarlo en su base de datos.
 
Última edición:

Uriel

Kappa
Redactor
Verificación en dos pasos desactivada
Desde
8 Jul 2009
Mensajes
2.688
Crédito(s)
0
Puntos
120
Ahora a spemear en facebook ;)

:bootyshake:
 

mardek

Gamma
Redactor
Verificación en dos pasos desactivada
Desde
19 Ene 2011
Mensajes
390
Crédito(s)
0
Puntos
6
Se agradece el aporte!
 

NASH

Dseda
SEO
Verificación en dos pasos desactivada
Desde
10 Abr 2011
Mensajes
1.158
Crédito(s)
0
Puntos
447
:congrats: Gracias.
Saludos
 

sonydei

Gamma
Verificación en dos pasos desactivada
Desde
25 Ene 2011
Mensajes
248
Crédito(s)
1
Puntos
69
No me acaba de funcionar.
A ver cuando el user le da permiso, se va a la pagina para seleccionar el signo, y esto no lo escribe en la base de datos
 

cicklow

Admin
Beta
Verificado con documento
Verificación en dos pasos activada
Desde
30 May 2011
Mensajes
57
Crédito(s)
1
Puntos
25.567
Fijate el fixed ke le puse!!! usa nuevamente el codigo!!!
 

sonydei

Gamma
Verificación en dos pasos desactivada
Desde
25 Ene 2011
Mensajes
248
Crédito(s)
1
Puntos
69
Gracias cicklow. Voy a probar, por cierto el del iframe me da este error Fatal error: Uncaught OAuthException: (#803
 

vieckthor

Beta
Verificación en dos pasos desactivada
Desde
12 Jul 2011
Mensajes
113
Crédito(s)
0
Puntos
0
Hola!

De "casualidad" lo tienes implementado en un lugar donde podamos probarlo?
Se agradece el aporte.
 

blueshadow

Beta
Redactor
Verificación en dos pasos desactivada
Desde
12 Ago 2011
Mensajes
109
Crédito(s)
0
Puntos
0
Disculpa Me confundi de Tema !
 
Última edición:

ikanus

Gamma
Programador
Verificación en dos pasos desactivada
Desde
22 Sep 2010
Mensajes
284
Crédito(s)
1
Puntos
16
Excelente código, pero da miedo la reacción de Facebook :pirate:
 

cicklow

Admin
Beta
Verificado con documento
Verificación en dos pasos activada
Desde
30 May 2011
Mensajes
57
Crédito(s)
1
Puntos
25.567
La respuesta de facebook es:
1- Banean tu apps
2- la subis de nuevo te la banean
3- la subis de nuevo banean tu cuenta
4- la subis con otro user banean la ip de tu servidor y volvemos al paso 1

jeje :D
 

edizzz

Gamma
Verificación en dos pasos desactivada
Desde
5 Oct 2012
Mensajes
172
Edad
32
Crédito(s)
1
Puntos
125
estos dos archivos, uno es el config.php y el otro es el index? lo siento por la pregunta pero estoy probando una por una tus apps y estan muy buenas.
 

cicklow

Admin
Beta
Verificado con documento
Verificación en dos pasos activada
Desde
30 May 2011
Mensajes
57
Crédito(s)
1
Puntos
25.567
estos dos archivos, uno es el config.php y el otro es el index? lo siento por la pregunta pero estoy probando una por una tus apps y estan muy buenas.
sisi, tengan en cuenta que el 5 de diciembre esto deja de funcionar, ya que eliminan el permiso offline_access

Saludos!
 

Arriba