Signaler

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

Posez votre question intissaroa 17Messages postés jeudi 9 mars 2017Date d'inscription 15 juin 2017 Dernière intervention - Dernière réponse le 15 juin 2017 à 13:40 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())
);
KX 14417Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 22 juin 2017 Dernière intervention - 15 juin 2017 à 10:29
Essayes ça et regarde lequel vaut null... et pourquoi.

System.out.println("aPost: " + aPost);
System.out.println("getLikes: " + aPost.getLikes());
System.out.println("getData: " + aPost.getLikes().getData());
Répondre
intissaroa 17Messages postés jeudi 9 mars 2017Date d'inscription 15 juin 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 14417Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 22 juin 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 17Messages postés jeudi 9 mars 2017Date d'inscription 15 juin 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 17Messages postés jeudi 9 mars 2017Date d'inscription 15 juin 2017 Dernière intervention - 15 juin 2017 à 13:40
merci biennnnnnnn #KX
Répondre
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 !