Visualizzazione post con etichetta Facebook. Mostra tutti i post
Visualizzazione post con etichetta Facebook. Mostra tutti i post

mercoledì 25 settembre 2019

Scrittura post automatici su pagina Facebook

Per creare dei post automatici su una pagina di Facebook (non il proprio account personale ma una relativa al proprio utente) si installa prima l'SDK in Python di Facebook

A questo punto dal Graph Explorer si devono concedere i permessi di scrittura che devono essere almeno a manage_pages and publish_pages



Si crea quindi una app dal proprio account developer Facebook e per semplicita' si elimina "Richiedi la chiave segreta" per le connesssioni tra server


il codice Python a questo punto e' molto semplice

-------------------------------------------------------------------------------
import facebook # facebook-sdk

access_token = "xxxxxxxxxxxxxx" # da recuperare nel GraphExplorer
graph = facebook.GraphAPI(access_token)

facebook_id = "120763xxxxxx" # id della pagina, si trova nelle Informazioni
                             # o la parte numerica della URL
graph.put_object(facebook_id,"feed",message="messaggio")

venerdì 4 ottobre 2013

Effettuare Like in automatico su Facebook mediante Temboo

Non sono ancora riuscito ad effettuare un like su un post od una pagina Facebook in modo automatico mediante il PHP SDK ma esiste un modo piu' semplice (a costi sostenibili) per effettuare la stessa operazione mediante Temboo

Per prima cosa si deve creare una applicazione Facebook che abbia la sola autenticazione via Web a Facebook. Si copiano come al solito la App  Key e la Secret Key dell'applicazione Facebook e si deve impostare la URL di accesso con il seguente indirizzo

https://www.temboo.com/oauth_helpers/confirm_facebook/



Fatto questo si va su Temboo si clicca sul pulsante blu Oauht Wizard per ottenere l'Access Token introducendo la App Key e la Secret Key di Facebook ( in questa fase viene chiesta la username e la password dell'utente Facebook con cui si intende effettuare il Like)
Se tutto va bene viene popolato il campo dell'Access Token

A questo punto si deve ottenere l'ObjectID del post o della pagina su cui si intende effettuare il Like come spiegato in questo precedente post



La procedura puo' essere automatizzata con lo script Php che usa le Api di Temboo riportato nel sample code

martedì 10 settembre 2013

Creazione di post automatici su Facebook con RFID su Android (7)



Qui viene descritto come pubblicare su Facebook in modo automatico mediante un telefono abilitato con Rfid. In pratica si tratta dell'unione di diversi post precedenti ed in particolare questo e questo


A differenza di Java, per creare una connessione Http in Android si devono prima settare i permessi nel file Manifest.xml (come al solito le modifiche rispetto ai post precedenti sono in giallo)


Manifest.xml
---------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test4"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="7"
        android:targetSdkVersion="16" />

    <uses-permission android:name="android.permission.NFC"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission  android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.test4.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


        <activity android:label="@string/event_verify" android:name="verifytagscanact">
            <intent-filter>
                <action android:name="android.nfc.action.TECH_DISCOVERED"/>
            </intent-filter>
            <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/filter_nfc"/>
        </activity>

    </application>

</manifest>
---------------------------------------------------

Nella main le modifiche sono minime e piuttosto simili a Java per l'oggetto HttpConnection. Molto peculiari sono le prime righe dopo OnCreate perche' sono relative ad una gestione specifica di Android (come si puo' leggere meglio spiegato in questo post)

MainActivity.java
---------------------------------------------------
package com.example.test4;

import android.os.Bundle;
import android.app.Activity;
import android.os.StrictMode;
import android.util.Log;
import android.view.Menu;
import android.nfc.Tag;
import android.nfc.NfcAdapter;
import android.nfc.tech.MifareClassic;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter.MalformedMimeTypeException;
import android.widget.Toast;
import java.math.BigInteger;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class MainActivity extends Activity {

    NfcAdapter adapter;
    PendingIntent pendingIntent;
    IntentFilter writeTagFilters[];
    String[][] techListsArray;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        StrictMode.ThreadPolicy policy = new StrictMode.
        ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        adapter = NfcAdapter.getDefaultAdapter(this);

        pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
        IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
        try {
            tagDetected.addDataType("*/*");
        }
        catch (MalformedMimeTypeException e) {
            throw new RuntimeException("fail", e);
        }
        tagDetected.addCategory(Intent.CATEGORY_DEFAULT);
        writeTagFilters = new IntentFilter[] { tagDetected };

        techListsArray = new String[][] { new String[] { MifareClassic.class.getName() } };

    }

    static String bin2hex(byte[] data) {
        return String.format("%0" + (data.length * 2) + "X", new BigInteger(1,data));
    }

    @Override
    protected void onNewIntent(Intent intent){
        //Toast.makeText(getApplicationContext(), "Trovato Tag", Toast.LENGTH_SHORT).show();
        Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        byte[] tagId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);


        // trasmissione dati al server
      try {
            URL url = new URL("http://m.msn.unifi.it/luca/examples/rfid_server3.php?rfid="+bin2hex(tag.getId())+"&msg=cellulare");
            HttpURLConnection connection;
            connection = (HttpURLConnection) url.openConnection();

            readStream(connection.getInputStream());
            Toast.makeText(getApplicationContext(), bin2hex(tag.getId()), Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
            e.printStackTrace();
              }
    

    }


 private void readStream(InputStream in) {
            BufferedReader reader = null;
            try {
                reader = new BufferedReader(new InputStreamReader(in));
                String line = "";
                while ((line = reader.readLine()) != null) {
                    System.out.println(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }

        }

    public void onPause() {
        super.onPause();
        adapter.disableForegroundDispatch(this);
    }

    public void onResume() {
        super.onResume();
        adapter.enableForegroundDispatch(this, pendingIntent, writeTagFilters, techListsArray);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}

---------------------------------------------------
deve essere infine modificato il file /res/values/strings.xml


il file sul server e' identico a quello usato in precedenza

Accoppiamento WiFly con lettore Rfid



Per lo shield WiFly e' stata effettuata la patch descritta qui


Per la connessione del lettore Rfid si usano i seguenti pin

VCC : 3.3V
GND :
MOSI: Pin 11 / ICSP-4
MISO: Pin 12 / ICSP-1
SCK: Pin 13 / ISCP-3
SS: Pin 10
RST: Pin 9

da notare che vista la presenza dello shield il PIN 3.3V risulta coperto per cui e' stato necessario mettere una patch piegando il piedino in modo da poter appoggiare lo shield. In realta' si potrebbe rubare la corrente saldando un contatto direttamente sullo shield

Lo sketch inizializza il lettore Rfid e la WiFly. Successivamente nel loop attende che venga passato il tag Rfid, lo legge ed invia il codice allo script in Php sul server
---------------------------------------------------
#include <WiFlyHQ.h>
#include <SPI.h>
#include <RFID.h>
#include <SoftwareSerial.h>


//WiFi
SoftwareSerial wifiSerial(2,3);
WiFly wifly;
const char mySSID[] = "TIM_PN51T_C0D1";
const char myPassword[] = "50276337";
const char site[] = "m.msn.unifi.it";

//RFid
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN, RST_PIN); 
int serNum0;
int serNum1;
int serNum2;
int serNum3;
int serNum4;

void terminal();

void setup()
{
    char buf[32];
    
    SPI.begin(); 
    rfid.init();

    Serial.begin(9600);
    pinMode(pushButton, INPUT);

    Serial.println("Starting");
    Serial.print("Free memory: ");
    Serial.println(wifly.getFreeMemory(),DEC);

    wifiSerial.begin(9600);
    if (!wifly.begin(&wifiSerial, &Serial)) {
        Serial.println("Failed to start wifly");
terminal();
    }

    /* Join wifi network if not already associated */
    if (!wifly.isAssociated()) {
/* Setup the WiFly to connect to a wifi network */
Serial.println("Joining network");
wifly.setSSID(mySSID);
wifly.setPassphrase(myPassword);
wifly.enableDHCP();

if (wifly.join()) {
   Serial.println("Joined wifi network");
} else {
   Serial.println("Failed to join wifi network");
   terminal();
}
    } else {
        Serial.println("Already joined network");
    }

    //terminal();

    Serial.print("MAC: ");
    Serial.println(wifly.getMAC(buf, sizeof(buf)));
    Serial.print("IP: ");
    Serial.println(wifly.getIP(buf, sizeof(buf)));
    Serial.print("Netmask: ");
    Serial.println(wifly.getNetmask(buf, sizeof(buf)));
    Serial.print("Gateway: ");
    Serial.println(wifly.getGateway(buf, sizeof(buf)));

    wifly.setDeviceID("Wifly-WebClient");
    Serial.print("DeviceID: ");
    Serial.println(wifly.getDeviceID(buf, sizeof(buf)));


}

void loop()
{
    if (wifly.available() > 0) {
char ch = wifly.read();
Serial.write(ch);
if (ch == '\n') {
   /* add a carriage return */ 
   Serial.write('\r');
}
    }

    if (Serial.available() > 0) {
wifly.write(Serial.read());
    }


 if (rfid.isCard()) {
        if (rfid.readCardSerial()) {
              if (wifly.isConnected()) {
                  Serial.println("Old connection active. Closing");
                  wifly.close();
                  }

              if (wifly.open(site, 80)) {
                  Serial.print("Connected to ");
                  Serial.println(site);
                  } else {
                  Serial.println("Failed to connect");
                }
                serNum0 = rfid.serNum[0];
                serNum1 = rfid.serNum[1];
                serNum2 = rfid.serNum[2];
                serNum3 = rfid.serNum[3];
                serNum4 = rfid.serNum[4];
                String Id = String(rfid.serNum[0],HEX)+String(rfid.serNum[1],HEX)+String(rfid.serNum[2],HEX)+String(rfid.serNum[3],HEX)+ String(rfid.serNum[4],HEX);
                Serial.println(Id);
                String params = "{}";
                String paramsLength = String(params.length());
                /* Send the request */
                
                wifly.println("POST /luca/examples/rfid_server2.php?rfid="+Id+"&msg=definitivo HTTP/1.1"); // paste your number here
                wifly.println("Host: m.msn.unifi.it:80");
                wifly.print("Content-Length: ");
                wifly.println(paramsLength);
                wifly.println("User-Agent: lifegraph/0.0.1");
                wifly.println();
                wifly.println(params);
             } 
        
    rfid.halt();
    }
}

/* Connect the WiFly serial to the serial monitor. */
void terminal()
{
    while (1) {
if (wifly.available() > 0) {
   Serial.write(wifly.read());
}


if (Serial.available() > 0) {
   wifly.write(Serial.read());
}
    }
}

-----------------------------------------------------------




Script Php

-----------------------------------------------------------
require_once '../src/facebook.php';
//Luca
if ($_GET["rfid"] == "f479abb492")
    {
    $accessToken = "CAAJkNq2LttoBAJywtmNSbVHqFPubOjYmQ2yyUG4kpibD75BHid9J7xsvif8osSOc4ewgK4aYerrLZBsZCQM5wykRTYVLDkCJXlXYl3gi8WFRQ8U4p4y4ZAXYsdamz6RVdRJZAe4vZA80mWBayuG0qc4IAj2TMDmQXKiv1OrKp8CwKjD6xxxxxxxxxxxxxxxxx";
    print "Luca<br>";
    }
//Gabriele
if ($_GET["rfid"] == "0800364CD7")
    {
    $accessToken = "CAAJkNq2LttoBACxBnb2QjtvbedXaRNwWDAniJsIE59ZBZBjDgsT1FtTmBIVxZAmS4MbbEXY8Y9kduFxfBmQhEgflGxdvXjRG1CAMHICGlHGaCXfP81VlLRySw2m8lzatt074jHsDKYlQjwZAHI725LLSMsAjjDDty3GDOrso0361xLCDzxxxxxxxxxxxxxxxxxxxxxxxxxx";
    print "Gabriele";
    }

$appid = '6731359560xxxxxx';
$appsecret = 'dde6cfb07dbb769c7efe94xxxxxxxxx';
$msg = $_GET["msg"];
$title = 'Dove sono ??';
$uri = 'http://debiaonoldcomputers.blogspot.com/';
$desc = 'Sono ad Arcetri';
$pic = 'http://www.dst.unifi.it/themes/Boozook/images/testa.gif';
$action_name = 'Link';
$action_link = 'http://www.geo.unifi.it/';

$facebook = new Facebook(array(
 'appId' => $appid,
 'secret' => $appsecret,
 'cookie' => false,
 ));

 $user = $facebook->getUser();


$attachment = array(
'access_token' => $accessToken,
'message' => $msg,
'name' => $title,
'link' => $uri,
'description' => $desc,
'picture'=>$pic,
'actions' => json_encode(array('name' => $action_name,'link' => $action_link))
);
$status = $facebook->api("/me/feed", "post", $attachment);
print "Ok";
?> 


lunedì 9 settembre 2013

Conteggio Like mediante Arduino

In questo post viene descritto come effettuare il conteggio dei Like di una pagina Facebook mediante Arduino

Sono sono stati utilizzati
Arduino UNO
Shield Ethernet
Bridge Ethernet-WiFi Vonets
Display LCD 1602 (modalita' I2C)



Il montaggio e' piuttosto semplice.
Il bridge e' stato usato per dare capacita' wireless all'Arduino senza utilizzare il costoso shield apposito
Il montaggio dei cavi del display e' spiegato in questo post


Di fatto l'Arduino efffettua una richiesta ad uno script Php che e' su server remoto, legge e mette a display il risultato (il tutto e' basato sull'Esempio WebClient della libreria Ethernet di Arduino)
-------------------------------------
#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display


String currentLine = "";            
String fbcount = "";                


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "m.xxxx.unifi.it";    

IPAddress ip(192,168,0,177);
EthernetClient client;

void setup() {
   lcd.init();    
   lcd.backlight();
   lcd.print("Facebook");
   lcd.setCursor(0,1);
   lcd.print("Like counter");
   
  Serial.begin(9600);
   while (!Serial) {
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
  }
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println("GET /xxxxxxx/like3.php HTTP/1.1");
    client.println("Connection: close");
    client.println();
  } 
  else {
    Serial.println("connection failed");
  }
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    //Serial.print(c);

    currentLine += c; 


      if ( currentLine.startsWith("Like:")) {
         
        fbcount += c;
        Serial.println(fbcount);
        lcd.clear();
        lcd.print("Like"+fbcount);

      }

     if (c == '\n') {
        currentLine = "";
        fbcount = "";
      } 

    
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    while(true);
  }
}
--------------------------------------------------
Script PHP
--------------------------------------------------
<?
require_once '../src/facebook.php';

$appid = '673135956047578';
$appsecret = 'dde6cfb07dbb769c7efe949c20afd73d';

$facebook = new Facebook(array(
 'appId' => $appid,
 'secret' => $appsecret,
 'cookie' => false,
 ));

$like = array(
    'method' => 'fql.query',
    'query' => 'select fan_count from page where page_id=266068113416863;'
);

$result = $facebook->api($like);

print "Like:".$result[0]['fan_count'];
?>


giovedì 5 settembre 2013

Creazione di post automatici su Facebook con RFID (6)


Riprendendo il filone degli esperimenti precedenti in questo caso il lettore Rfid e' legato ad una Arduino che si occupa del carico di lavoro per l'interfaccia Web
Le connessioni per il lettore RFID sono

MOSI: Pin 11 / ICSP-4
MISO: Pin 12 / ICSP-1
SCK: Pin 13 / ISCP-3
SS: Pin 6 
RST: Pin 7

La scheda Arduino ha ovviamente montato lo Shield Ethernet



----------------------------------------
#include <SPI.h>
#include <Ethernet.h>
#include <RFID.h>


#define SS_PIN 6
#define RST_PIN 7
RFID rfid(SS_PIN, RST_PIN); 

int serNum0;
int serNum1;
int serNum2;
int serNum3;
int serNum4;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "m.xxxxxnifi.it";    


IPAddress ip(192,168,0,177);
EthernetClient client;

void setup() {
  Serial.begin(9600);
   SPI.begin(); 
  rfid.init();
  
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
    }
    else
    {
      Serial.println("IP Acquisito");
    }
  delay(1000);
  


}

void loop()
{
 if (rfid.isCard()) {
        if (rfid.readCardSerial()) {
                serNum0 = rfid.serNum[0];
                serNum1 = rfid.serNum[1];
                serNum2 = rfid.serNum[2];
                serNum3 = rfid.serNum[3];
                serNum4 = rfid.serNum[4];
                String Id = String(rfid.serNum[0],HEX)+String(rfid.serNum[1],HEX)+String(rfid.serNum[2],HEX)+String(rfid.serNum[3],HEX)+ String(rfid.serNum[4],HEX);
                Serial.println(Id);
                if (client.connect(server, 80)) {
                        Serial.println("connected");
                        client.println("GET /luca/xxxxxxx/rfid_server2.php?rfid="+Id+" HTTP/1.1");
                        client.println("Host: www.google.com");
                        client.println("Connection: close");
                        client.println();
                        } 
                        else {
                        Serial.println("connection failed");
                        }
              } 
          }
 rfid.halt();
 }
----------------------------------------


----------------------------------------
<?
require_once '../src/facebook.php';
//Luca
if ($_GET["rfid"] == "f479abb492")
    {
    $accessToken = "CAAJkNq2LttoBAJywtmNSbVHqFPubOjYmQ2yyUG4kpibD75BHid9J7xsvif8osSOc4ewgK4aYerrLZBsZCQM5wykRTYVLDkCJXlXYl3gi8WFRQ8U4p4y4ZAXYsdamz6RVdRJZAe4vZA80mWBayuG0qc4IAj2TMDmQXKiv1OrKp8CwKjD6Rz2ZCAqp8yxxxxxxxx";
    print "Luca<br>";
    }

$appid = '673135956xxxxxx';
$appsecret = 'dde6cfb07dbb769c7efe949xxxxxx';
$msg = $_GET["msg"];
$title = 'Dove sono ??';
$uri = 'http://debiaonoldcomputers.blogspot.com/';
$desc = 'Sono ad Arcetri';
$pic = 'http://wwxxxxxxxxxxxxxxxxxmes/Boozook/images/testa.gif';
$action_name = 'Link';
$action_link = 'http://www.geo.unifi.it/';

$facebook = new Facebook(array(
 'appId' => $appid,
 'secret' => $appsecret,
 'cookie' => false,
 ));
 $user = $facebook->getUser();
$attachment = array(
'access_token' => $accessToken,
'message' => $msg,
'name' => $title,
'link' => $uri,
'description' => $desc,
'picture'=>$pic,
'actions' => json_encode(array('name' => $action_name,'link' => $action_link))
);
$status = $facebook->api("/me/feed", "post", $attachment);
print "Ok";
?> 


martedì 3 settembre 2013

Ottenere il numero di Like su una pagina Facebook (2)

Per ottenere il numero di Like su una pagina direttamente da browser si puo' lanciare il seguente comando

http://api-read.facebook.com/restserver.php?format=xml&method=fql.multiquery&pretty=0&queries={%22page_info%22%3A%22select%20name%2Cfan_count%2Cpage_url%2Ctype%20from%20page%20where%20page_id%20IN%20(266068113416863)%22}&sdk

dove si deve modificare il solo Id pagina (in questo caso 266068113416863)

Ottenere il numero di Like su una pagina Facebook

Diciamo che vogliamo visualizzare da programma il numero di Like su una pagina Facebook per esempio questa

https://www.facebook.com/SAAM.Firenze

Per prima cosa si deve conoscere l'id della pagina che si ottiene usando OpenGraph

http://graph.facebook.com/?ids=https://www.facebook.com/SAAM.Firenze

che produce il seguente risultato. Circa alla fine si trova

"id": "266068113416863",
che e' il numero desiderato

-----------------------------------
{
   "https://www.facebook.com/SAAM.Firenze": {
      "about": "Istruttore e Responsabile di sala: Alessandro Battistini Iacopo Venni Lorenzo Leoni",
      "category": "Sports venue",
      "description": "La sede di Firenze della Sala d'Arme Achille Marozzo svolge ampio lavoro di ricerca sulla scherma del medioevo e del rinascimento. Finalmente, dopo lungo tempo passato sullo studio sui trattatisti toscani, si sono aperti, per la prima volta, corsi sulle tecniche di combattimento della antica scuola di scherma fiorentina.",
      "hours": {
         "tue_1_open": "20:30",
         "tue_1_close": "23:00",
         "thu_1_open": "20:30",
         "thu_1_close": "23:00"
      },
      "is_published": true,
      "location": {
         "street": "Via Pistoiese angolo Viuzzo della Cavalla",
         "city": "Florence",
         "state": "",
         "country": "Italy",
         "zip": ""
      },
      "parking": {
         "street": 1,
         "lot": 0,
         "valet": 0
      },
      "phone": "+39 339 66.83.646",
      "price_range": "$$$ (30-50)",
      "talking_about_count": 67,
      "username": "SAAM.Firenze",
      "website": "http://www.achillemarozzo.it/sale/firenze.php",
      "were_here_count": 0,
      "id": "266068113416863",
      "name": "Sala d'arme Achille Marozzo - Firenze",
      "link": "http://www.facebook.com/SAAM.Firenze",
      "likes": 259,
      "cover": {
         "cover_id": 366553573368316,
         "source": "http://sphotos-b.ak.fbcdn.net/hphotos-ak-prn1/s720x720/64899_366553573368316_453567495_n.jpg",
         "offset_y": 55,
         "offset_x": 0
      }
   }
}
-----------------------------------

a questo punto si puo' scrivere una semplice applicazione Facebook che tramite le Api ci riporti il valore di Like (che come si vede dall'interfaccia Web e' di 259) Come si vede, a parte le chiavi dell'applicazione non e' necessario passare nessun access token od avere permessi particolari

--------------------------------------
<?
require_once '../src/facebook.php';

$appid = '673135956xxxxxx';
$appsecret = 'dde6cfb07dbb769c7efxxxxxx';

$facebook = new Facebook(array(
 'appId' => $appid,
 'secret' => $appsecret,
 'cookie' => false,
 ));


$like = array(
    'method' => 'fql.query',
    'query' => 'select fan_count from page where page_id=266068113416863;'
);

$result = $facebook->api($like);

print $result[0]['fan_count'];
?>

--------------------------------------

venerdì 30 agosto 2013

Creazione di post automatici su Facebook (4)

Questo riepilogo non è disponibile. Fai clic qui per visualizzare il post.

Creazione di post automatici su Facebook (3)


Arduino con shield Ethernet e sullo sfondo il post automatico su Facebook

E con questo siamo arrivati al termine del lavoro per poter postare su Facebook mediante Arduino.

Visti i precedenti post (1 e 2) adesso si deve configurare l'Arduino come Client Http per chiamare lo script Php che genera post automaticamente mediante l'access_token

La cosa e' piuttosto semplice e viene compiuta dallo sketch sottostante che crea una chiamata HTTP passando i parametri via GET. Il codice si commenta da solo

----------------------------------------
#include <Ethernet.h>
#include <SPI.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte server[] = { 150, 217, 73, XX }; 

EthernetClient client;

void setup()
{
  Ethernet.begin(mac);
  Serial.begin(9600);
  client.connect(server, 80);
  delay(1000);

  Serial.println("connecting...");

  if (client.connected()) {
    Serial.println("connected");
    client.println("GET /luca/xxxxxx/example3.php?msg=Arduino_automatico HTTP/1.0");
    client.println();
  } else {
    Serial.println("connection failed");
  }
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}
------------------------------------------------------
sul lato server il log di apache mostra la connessione dell'Arduino con il web server

----------------------------
m.xxxxx.unifi.it:80 79.4.7.201 - - [29/Aug/2013:23:01:31 +0200] "GET /luca/xxxxx/example3.php?msg=Arduino_automatico HTTP/1.0" 200 418 "-" "-"

giovedì 29 agosto 2013

Creazione di post automatici su Facebook (2)

Proseguendo il discorso iniziato con il post precedente adesso si cerca di pubblicare un post senza l'interazione utente utilizzando l'access token

La stringa dell'access token e' quella lunga stringa alfanumerica che viene prodotta come risultato dallo script del post precedente
Per la politica di Facebook attualmente questo metodo funziona solo per 60 giorni perche' gli access token hanno una durata temporale; dopo tale scadenza l'utente deve riloggarsi  manualmente ed ottenere un nuovo access token

Questo script di fatto e' una versione semplificata del precedente in cui tutta la fase di autenticazione e' contenuta nell'access token

E' stato leggermente modificato il campo messaggio in modo da renderlo dinamico.
In questo modo se si aggiunge la variale msg alla URL si modifica il testo del messaggio
tipo

http://www.mioserver//script.php?msg=Luca

--------------------------------------------------------------------
<?
require_once '../src/facebook.php';

$appid = '6731359560xxxxxx';
$appsecret = 'dde6cfb07dbb769c7efe949cxxxxxxx';
$msg = $_GET["msg"];
$title = 'Messaggio Automatico Arduino';
$uri = 'http://debiaonoldcomputers.blogspot.com/';
$desc = 'Luca Innocenti.';
$pic = 'https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgluMOnPyTph3iUuLEcHHX8yoUSfMUnM5JlJH4xtJUoNTbZydICSkco_aB1Nc_gZ521xnI_JRptSkThfY7w1-dVLT7_9y5lzyWslzLYnhTQaExMPdr9Z8-Ed73ymkPwQwpnXmKuhfGdJPJ4/s400/Basic-+Facebook+Developers.jpg';
$action_name = 'Action Link in the Footer of the Post';
$action_link = 'http://debiaonoldcomputers.blogspot.com/';

$facebook = new Facebook(array(
 'appId' => $appid,
 'secret' => $appsecret,
 'cookie' => false,
 ));

 $user = $facebook->getUser();
 $accessToken = "CAAJkNq2LttoBAJywtmNSbVHqFPubOjYmQ2yyUG4kpibD75BHid9J7xsvif8osSOc4ewgK4aYerrLZBsZCQM5wykRTYVLDkCJXlXYl3gi8WFRQ8U4p4y4ZAXYsdamz6RVdRJZAe4vZA80mWBayuG0qc4IAj2TMDmQXKiv1OrKp8CwKjD6Rz2ZCAqpxxxxxxxx";

$attachment = array(
'access_token' => $accessToken,
'message' => $msg,
'name' => $title,
'link' => $uri,
'description' => $desc,
'picture'=>$pic,
'actions' => json_encode(array('name' => $action_name,'link' => $action_link))
);
$status = $facebook->api("/me/feed", "post", $attachment);
print "Ok";
?>


mercoledì 28 agosto 2013

Creazione di post automatici su Facebook

Questo post e' relativo ad un tentativo di connettere una Arduino ad un profilo Facebook per pubblicare i dati di un sensore

Esempi di pubblicazione automatica di post su Facebook se ne trovano a decine ma sono quasi tutti inutili perche' relativi ad API e sistemi di autenticazione non piu' in utilizzo presso Facebook

Per prima cosa, come visto in questo post, si deve creare una applicazione Facebook scegliendo stavolta App on Facebook. 
Si devono quindi compilare i dati delle informazioni di base, togliere la modalita' SandBox e poi indicare l'indirizzo della directory del server dove sono contenuti gli script Php che contengono l'applicazione (anche qui l'indizzo del server deve essere FQD e deve essere disponibili https)


a questo punto si inizia a lavorare sul lato server copiando l'SDK PHP di Facebook ed aggiungendo il seguente script (ripreso da questo link)  nella directory indicata nella schermata precedente
--------------------------------------------------------------
<?php

 require_once '../src/facebook.php';

// configuration
 $appid = '67313595xxxxxxxx';
 $appsecret = 'dde6cfb07dbb769c7efxxxxxxx';
 $msg = 'Messaggio';
 $title = 'Titolo';
 $uri = 'http://www.google.com';
 $desc = 'Descrizione';
 $pic = 'http://www.testcom/test.png';
 $action_name = 'Action Link in the Footer of the Post';
 $action_link = 'http://www.nathanbolin.com';

$facebook = new Facebook(array(
 'appId' => $appid,
 'secret' => $appsecret,
 'cookie' => false,
 ));


$user = $facebook->getUser();

// Contact Facebook and get token
 if ($user) {
// you're logged in, and we'll get user acces token for posting on the wall
try {
$accessToken = $facebook->getAccessToken();
if (!empty( $accessToken )) {
$attachment = array(
'access_token' => $accessToken,
'message' => $msg,
'name' => $title,
'link' => $uri,
'description' => $desc,
'picture'=>$pic,
'actions' => json_encode(array('name' => $action_name,'link' => $action_link))
 );

$status = $facebook->api("/me/feed", "post", $attachment);
} else {
$status = 'No access token recieved';
}
  } catch (FacebookApiException $e) {
  error_log($e);
  $user = null;
}
 } else {
// you're not logged in, the application will try to log in to get a access token
header("Location:{$facebook->getLoginUrl(array('scope' => 'photo_upload,user_status,publish_stream,user_photos,manage_pages'))}");
 }
print_r($status);
?>
------------------------------------

Se tutto e' andato a buon fine si avra' come risultato una pagina con scritto l'access token utilizzato (ovvero l'autorizzazione di Facebook) e nel proprio profilo Facebook si avra' il post pubblicato

Il passo successivo sara' utilizzare l'access token per evitare che vi debba essere l'interazione umana per effettuare il login in modo da permettere ad Arduino di pubblicare dati in automatico

Geologi

  E so anche espatriare senza praticamente toccare strada asfaltata