Wie rufe ich Facebook Legacy API von Android

S

sem_thesis

Fortgeschrittenes Mitglied
0
Hallo!


Ich habe Facebook SDK auf Android installiert und auch schon ein paar Userdaten vom Graph API gesammelt.

Nun möchte ich die Methode friends.getMutualFriends des Legacy API's (Link) verwenden, um die gemeinsamen Freunde zweier FB-User zu bestimmen.

Dazu habe ich mir das Android-Tutorial auf FB Docs (Link) angeschaut.

Dort steht Folgendes:
// get information about the currently logged in user
facebook.request("me");
//get the logged-in user's friends
facebook.request("me/friends");

//call a Legacy REST API method
Bundle parameters = new Bundle();
parameters.putString("method", "auth.expireSession");
String response = request(parameters);
Das Graph API konnte ich wie erwähnt erfolgreich aufrufen.
Code:
public static final APP_ID = "asdfasdf";
mFacebook = new Facebook(APP_ID);
mAsyncRunner = new AsyncFacebookRunner(mFacebook);
mAsyncRunner.request("me", new IDRequestListener());
Bei dem Aufruf Legacy-API scheitert das Ganze:
Code:
//call the Legacy REST API method friends.getMutualFriends
Bundle parameters = new Bundle();
parameters.putString("friends.getMutualFriends", "auth.expireSession");
String response = request(parameters);
Eclipse gibt die Fehlermeldung:

The method request(Bundle) is undefined for the type FBDataViewer (die Klasse wo der ganze Code steht)
Ich verstehe nicht, was hier falsch läuft??

Ausserdem: Wie kann ich für die friends.getMutualFriends-Methode Parameter wie targetid und sourceid angeben?
 
Kranki schrieb:

Du meinst diesen hier?
We are in the process of deprecating the REST API. If you are building a new Facebook application, please use the Graph API. While there is still functionality that we have not ported over yet, the Graph API is the center of Facebook Platform moving forward and where all new features will be found.

Der Graph API unterstützt die friends.getMutualFriends-Funktion noch nicht :-(
Jah - vielleicht ist's nicht so sinnvoll, aber meine App wird später (von einer anderen Person) auch updated. Sie soll aber mit den jetzt vorhandenen Mitteln (Legacy API) funktionieren können.
 
Nein, den darunter. (OK, dann ist das halt der zweite Absatz.)
The REST API enables you to interact with Facebook web site programmatically via HTTP requests.
The REST API supports both OAuth 2.0 as well as an older, custom authorization signature scheme. See the authentication upgrade guide for information about how to upgrade your existing sessions to OAuth 2.0.
To make requests to the REST API with OAuth, you requests URLs in the following format:
https://api.facebook.com/method/method_name? access_token=oauth_access_token& arg0=value0& arg1=value1 For example, you can fetch Zuck's profile with:
https://api.facebook.com/method/users.getInfo?uids=4&fields=name&access_token=...
 
Ok, das habe ich vorhin gelesen.
Aber ich habe keine Ahnung wie das in Android realisierbar ist.

HTTP requests?
Wie baue ich mein access_token im HTTP Request hinein??
 
Kranki schrieb:


Danke!
Jetzt habe ich mal deinen Tutorial befolgt.
Damit will ich nun (für den Moment) das Resultat der GET-Abfrage anzeigen lassen.
Der Code für die Webservice-Bearbeitung sieht nun folgendermassen aus:


Code:
public class WebService    {  
      
    //Bezeichnung der Klasse   
    private final String TAG = "WebService";  
    
    // globale Variable
    HttpClient httpClient;
      
    
    public void getJSONObject(String url)    {  
      
        httpClient = new DefaultHttpClient();  
        HttpGet httpGet = new HttpGet(url);  
        HttpResponse response;  
      
        try {  
            response = httpClient.execute(httpGet);  
      
            // TODO: HTTP-Status (z.B. 404) in eigener Anwendung verarbeiten.  
      
            Log.i(TAG,response.getStatusLine().toString());  
      
            HttpEntity entity = response.getEntity();  
      
            
            if (entity != null) {  
      
                InputStream instream = entity.getContent();  
                BufferedReader reader = new BufferedReader(new InputStreamReader(instream));  
                StringBuilder sb = new StringBuilder();  
      
                String line = null;  
                while ((line = reader.readLine()) != null)    {
                    sb.append(line + "n"); 
                }
                          
                String result=sb.toString(); 
                Log.i(TAG,result);
                
            }
            
            
        }    catch (ClientProtocolException e) {  
                e.printStackTrace();  
        }    catch (IOException e) {  
                e.printStackTrace();  
           }    catch (Exception e){  
                e.printStackTrace();  
           }    finally    {  
                httpGet.abort();  
           }  
           
    }
    
    
    
    public void postJSONObject(String url, JSONObject data, String objectName)    {  

        HttpPost postMethod = new HttpPost(url);  
      
        try    {  
            HttpParams params = new BasicHttpParams();  
            params.setParameter(objectName, data.toString());  
      
            postMethod.setParams(params);  
            httpClient.execute(postMethod);  
            Log.i(TAG, "Post request, data: " + params.toString());  
      
        }    catch (ClientProtocolException e)    {  
            e.printStackTrace();  
        }    catch (IOException e)    {  
            e.printStackTrace();  
        }    catch (Exception e)    {  
            e.printStackTrace();        
        }    finally    {  
            postMethod.abort();  
        }
        
    }
    
        
}

Soweit, so gut.

Jetzt kommt der Aufruf in der Hauptklasse:

Code:
WebService s = new WebService();
s.getJSONObject("https://api.facebook.com/method/friends.getMutualFriends?target_uid=504184526&access_token=oauth_access_token");

Die URL habe ich von der folgenden Seite erstellt.
Ich habe eine beliebige ID aus meiner Freundesliste genommen mit dem ich 2 gemeinsame Freunde habe.

Nun wird, wie gewollt, die result variable geloggt.
Sie hat folgenden Output:

<?xml version="1.0" encoding="UTF-8"?>

<error_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">
<error_code>190</error_code>
<error_msg>Invalid OAuth access token.</error_msg>
<request_args list="true">
<arg>
<key>method</key>
<value>friends.getMutualFriends</value>
</arg>
<arg>
<key>target_uid</key>
<value>504184526</value>
</arg>
<arg>
<key>access_token</key>
<value>oauth_access_token</value>
</arg>
</request_args>
</error_response>

Ich verstehe nicht wieso der access_token nicht akzeptiert wird.
Ist mein Funktionsaufruf falsch geraten???
 
Ich habe mir gerade das Facebook Framework für das Graph API angeschaut. Das Framework macht schon alles (token-bearbeitung, request, etc.). Man muss nur die AsyncFacebookRunner-Klasse aufrufen und ein request("url") mit der richtigen URL schicken.

Kann ich dieses Framework nicht direkt auch für das Legacy API nutzen?
 

Anhänge

  • facebook.zip
    74,4 KB · Aufrufe: 70
Es kann ja wohl nicht so schwer sein die alte Facebook API zu benutzen.

Das Framework com_facebook_android macht das ja schon für die neue Graph API.


Muss ich nun also
a) ein neues HTTP-Request + HTTP-Get + Tokenverarbeitung Framework erstellen
oder
b) kann ich einfach meine HTTP-Requests insr alte Framework einbauen
oder
c) brauche ich gar kein Framework und kann einfach 2-3 Zeilen HTTP-Request-Code einbauen?



Ich steh' da echt auf dem Schlauch.
Was soll das ganze Facebook-Zeug? Es isch so schlecht dokumentiert...
 

Ähnliche Themen

2
Antworten
6
Aufrufe
269
24559
2
M
Antworten
4
Aufrufe
1.173
swa00
swa00
Zurück
Oben Unten