Signaler

Extraire les nom des amis facebook qui ont fait des aimes [Résolu]

Posez votre question intissaroa 24Messages postés jeudi 9 mars 2017Date d'inscription 26 juillet 2017 Dernière intervention - Dernière réponse le 19 juil. 2017 à 13:30 par intissaroa
Bonjour,
j'ai essayé de retrouver les noms des amis qui ont fait des aimes sur les postes de facebook. voici le code:
public class main {
public static void main(String[] args) throws IOException {
String accessToken = "EAACEdEoseZBhf0e4WXHuNaItvLeoAZD";
FacebookClient fbclient = new DefaultFacebookClient(accessToken);
Connection<Post> result = fbclient.fetchConnection("me/feed", Post.class);
int counter = 0;
for (List<Post> page : result) {
for (Post aPost : page) {
Date time = aPost.getCreatedTime();
Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR, -10);
Date db = c.getTime();
{
if (!time.before(db)) {
System.out.println("created time " + time + "\r\n");
System.out.println("Id Poste: fb.com/" + aPost.getId() + "\r\n");
System.out.println(" L(userx) " + aPost.getLikes());
counter++;
} else {
System.out.println("date hors période" + "\r\n");
}
}
}
}
}

le resultat de ce code est comme suit:
Likes[data=[NamedFacebookType[id=758248010897019 metadata=null name=Toka Ep Bouzidi type=null], NamedFacebookType[id=836615436419028 metadata=null name=Basma Youssfi type=null], NamedFacebookType[id=200283693703077 metadata=null name=Sahar Hmidet type=null], NamedFacebookType[id=1589600437936215 metadata=null name=Fifi Daly Omm Omar type=null], NamedFacebookType[id=2285678608326303 metadata=null name=Rà Nou type=null], NamedFacebookType[id=149760905397346 metadata=null name=Awatef Cherif type=null], NamedFacebookType[id=197868283998495 metadata=null name=Samar Maamouri type=null], NamedFacebookType[id=191663454652822 metadata=null name=Ben Ali Fatma Benali type=null], NamedFacebookType[id=1594576777456573 metadata=null name=Rania Trigui type=null], NamedFacebookType[id=10204633957434960 metadata=null name=Gasmi Ghassen type=null]] totalCount=0]
===================================


je veux extraire seulement les nom de mes amis..
merci.
Afficher la suite 
Utile
+0
plus moins
Bonjour,
Donc un tableau qui contient name :
tableau[name]
Donnez votre avis
Utile
+0
plus moins
Avec du Regex tu peux :
name=(.+?) type

Test ici :
https://regex101.com/
Donnez votre avis
Utile
+0
plus moins
Bonjour,

Au lieu de faire
System.out.println(" L(userx) " + aPost.getLikes());
et essayer d'extraire le texte qui en découle, utilise directement l'objet aPost.getLikes() pour récupérer uniquement les données que tu veux.

Exemple :
aPost.getLikes().getData().forEach(data ->
    System.out.println(data.getName())
);
intissaroa 24Messages postés jeudi 9 mars 2017Date d'inscription 26 juillet 2017 Dernière intervention - 15 juin 2017 à 10:42
System.out.println("getLikes: " + aPost.getLikes());

l' instruction renvoient nulle. car il y a des poste sur Facebook qui peuvent avoir 0 like.
System.out.println("getData: " + aPost.getLikes().getData());

cet instruction renvoi
Exception in thread "main" java.lang.NullPointerException

s'il n y a pas de like sur la poste de Facebook
Répondre
KX 14702Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 22 août 2017 Dernière intervention - 15 juin 2017 à 11:20
Donc c'est là qu'est ton NullPointerException...
Il ne faut pas faire ta boucle d'affichage s'il n'y a pas de likes.

Tu peux le faire avec des if classiques qui vont vérifier que la valeur n'est pas null, mais si chaque méthode est susceptible de renvoyer null ça veut dire un if à chaque fois, ça peut rapidement devenir lourd...

On peut aussi faire ça avec des Optional, ce qui se combine bien avec les Stream.
Exemple :

Optional.ofNullable(aPost)
    .flatMap(post -> Optional.ofNullable(post.getLikes()))
    .flatMap(likes -> Optional.ofNullable(likes.getData()))
    .ifPresent(likeItems -> 
        likeItems.stream()
            .map(likeItem -> Optional.ofNullable(likeItem.getName()))
            .forEach(optName -> optName.ifPresent(name ->
                out.write(name + "\r\n")
            ))
    );
Répondre
intissaroa 24Messages postés jeudi 9 mars 2017Date d'inscription 26 juillet 2017 Dernière intervention - 19 juil. 2017 à 13:30
bonjour #KX SVP aide moi:
je fait le run de mon code il m'affiche la liste de like à NULL.
pourquoi??
c'est le même code qui m'a affiché des résultats l'autre fois.
merci
Répondre
intissaroa 24Messages postés jeudi 9 mars 2017Date d'inscription 26 juillet 2017 Dernière intervention KX - 15 juin 2017 à 11:00
merci Kx
j'ai fait ça:
if(aPost.getLikes()== null)
{ out.write("pas de like");}
else {aPost.getLikes().getData().forEach(data ->out.write(data.getName()));}

et ça marche
merci bien de ton aide
Répondre
intissaroa 24Messages postés jeudi 9 mars 2017Date d'inscription 26 juillet 2017 Dernière intervention - 15 juin 2017 à 13:40
merci biennnnnnnn #KX
Répondre
Donnez votre avis
Utile
+0
plus moins
@KX
bonjour, j'ai fait le code suivant:

import com.restfb.Connection;
import com.restfb.DefaultFacebookClient;
import com.restfb.FacebookClient;
import com.restfb.types.Post;
import java.io.*;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Optional;

public class main {

public static void main(String[] args) throws IOException {
String accessToken ="EAACEdEose0cBANEXpFEXQZALRTI8k84B2po0w";
FacebookClient fbclient = new DefaultFacebookClient(accessToken);
Connection<Post> result = fbclient.fetchConnection("me/feed",Post.class );
int counter = 0;
for(List<Post> page : result)
{
for(Post aPost : page)
{
Calendar c = Calendar.getInstance();
Calendar a = Calendar.getInstance();
a.add(Calendar.YEAR, -10);
Date Fin = a.getTime();
Date db = c.getTime();
Date time = aPost.getCreatedTime();
double CONST_DURATION_OF_DAY = 1000l * 60 * 60 * 24;
double diff = Math.abs(db.getTime() - time.getTime());
double numberOfDay = Math.round((diff/CONST_DURATION_OF_DAY) *
100) / 100;
double numberofyear = (double) Math.round((numberOfDay/356) * 100)
/ 100;
double dbwint = (100-(numberofyear*10))/100 ;
double Wint = (double) Math.round( dbwint * 100) / 100;

if(!time.before(Fin))
{

System.out.println("created time "+time+"\r\n");
System.out.println("Id Poste: fb.com/"+aPost.getId()+"\r\n");
System.out.println("le poid de l'interaction Wint "+Wint+"\r\n");
Optional.ofNullable(aPost .flatMap(post -> Optional.ofNullable(post.getLikes()))
.flatMap(likes -> Optional.ofNullable(likes.getData()))
.ifPresent(likes -> likes.stream()
.map(likeItem -> Optional.ofNullable(likeItem.getName()))
.forEach(optName -> optName.ifPresent(name ->
System.out.println(name + "\r\n"))));

System.out.println("==================================="+"\r\n");

counter++;

}
else {System.out.println("date hors période"+"\r\n");}

}
System.out.println("number of results"+counter);

}
}
}
}



l'output est comme suit:

created time Thu Jun 15 03:52:53 CEST 2017 
Id Poste: fb.com/1562752627337463_1951227231823332
le poid de l'interaction Wint 1.0
Fifi Daly Omm Omar
Toka Ep Bouzidi
===================================
created time Wed Jun 14 21:14:14 CEST 2017
Id Poste: fb.com/1562752627337463_1951069731839082
le poid de l'interaction Wint 0.9
Sami Dali
Toka Ep Bouzidi
Àmine OuLéd Ahméd
Faiza Ouled Ahmed
Rania Trigui
Hàifà Gassoumi
Awatef Cherif
Dali Montassar
Souad Brahmi
Nabiha Ben Aissa
Deli Maha
===================================
created time Wed Jun 14 19:39:27 CEST 2017
Id Poste: fb.com/149760905397346_444326185940815
le poid de l'interaction Wint 0.9

===================================
created time Wed Jun 14 01:26:57 CEST 2017
Id Poste: fb.com/1562752627337463_1950398421906213
le poid de l'interaction Wint 0.7
Nesrine Jalleli
Esmeralda Sagittaire
Aymen J'rb
===================================


mon probléme c'est comment calculer la somme de poid pour chaque ami:
exemple: pour l'ami Toka Ep Bouzidi , le poid = 1.0+0.9= 1.9.
merci bien de m'aider.
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !