/midiBIN_CrowdTangle

Contenu, fichiers et liens pour une présentation dans le cadre des midis du BIN (Bureau des initiatives numériques) du CIRST (Centre interuniversitaire de recherche sur la science et la technologie)

GNU General Public License v3.0GPL-3.0

midiBIN_CrowdTangle (18 février 2021)

Contenu, fichiers et liens pour une présentation dans le cadre des midis du BIN (Bureau des initiatives numériques) du CIRST (Centre interuniversitaire de recherche sur la science et la technologie).

Avant -> GraphAPI

  • GraphAPI (existe toujours, mais est plus difficile d'accès)

  • Des chercheurs ont prévenu qu'il y avait des problèmes pour la vie privée

  • Et Facebook a fermé les écoutilles.

CrowdTangle

  • Créé en 2015 (brevet)

  • Acquis par Facebook en 2016.

  • Accessible à chercheuses.eurs dans le cadre du partenariat Social Science One de Harvard

  • Prend trois formes:

    1. Extension chrome

    2. Tableau de bord (ou dashboard)

    3. API

      • Pour une utilisation programmatique. Avec la fonction search, ci-dessus, qui permet de retourner 300 000 posts, ce n'est plus guère nécessaire, sinon pour mettre sur pied une veille ou pour aller chercher davantage de posts...

      • Nécessite l'utilisation d'un jeton (API token). Chaque jeton est associé à un tableau de bord.

        • Limites:

          • 100 posts à la fois (pallier avec la pagination)
          • 6 appels à la minute seulement! (mettre des sleep de 10 secondes dans vos scripts 😱)
      • endpoint posts

        Permet d'aller chercher tous les posts d'une liste donnée, préalablement préparée dans un tableau de bord.

        Exemple avec l'une des listes vues plus haut, First nations pages qui regroupe plus de 800 pages. Son numéro est 1347336. Avec le jeton, ce numéro permet de construire un appel à l'API de CrowdTangle. Voici un exemple. Cette liste de posts mentionnant la Covid-19 dans les pages ou groupes Facebook autochtones est peuplée automatiquement par des appels simples comme celui-ci (pour les pages; un autre appel doit être fait pour les groupes):

        https://api.crowdtangle.com/posts?token={votreToken}&listIds=1347336&count=100

        Va retourner quelque chose comme ceci:

        {
          "platformId": "1834379636802508_2818911758349286",
          "platform": "Facebook",
          "date": "2021-02-18 00:22:24",
          "updated": "2021-02-18 03:12:23",
          "type": "photo",
          "message": "COMMUNIQUÉ DE PRESSE POUR DIFFUSION IMMÉDIATE FINANCEMENT MAJEUR VISANT À CONTRER LA CRISE DU LOGEMENT À UASHAT MAK MANI-UTENAM 200 unités sur une période de 5 ans",
          "expandedLinks": [
            {
              "original": "https://www.facebook.com/1834379636802508/photos/a.2216093811964420/2818911728349289/?type=3",
              "expanded": "https://www.facebook.com/1834379636802508/photos/a.2216093811964420/2818911728349289/?type=3"
            }
          ],
          "link": "https://www.facebook.com/1834379636802508/photos/a.2216093811964420/2818911728349289/?type=3",
          "postUrl": "https://www.facebook.com/1834379636802508/posts/2818911758349286",
          "subscriberCount": 3793,
          "score": 2.473684210526316,
          "media": [
            {
              "type": "photo",
              "url": "https://scontent-sjc3-1.xx.fbcdn.net/v/t1.0-9/s720x720/151623426_2818911731682622_6907612249238609571_o.jpg?_nc_cat=103&ccb=3&_nc_sid=110474&_nc_ohc=VILGJD8JktEAX8r9hYy&_nc_ht=scontent-sjc3-1.xx&tp=7&oh=6ad7f48fef65876da74e7c9ce731c7e8&oe=6054D1D7",
              "height": 720,
              "width": 437,
              "full": "https://scontent-sjc3-1.xx.fbcdn.net/v/t1.0-9/s720x720/151623426_2818911731682622_6907612249238609571_o.jpg?_nc_cat=103&ccb=3&_nc_sid=110474&_nc_ohc=VILGJD8JktEAX8r9hYy&_nc_ht=scontent-sjc3-1.xx&tp=7&oh=6ad7f48fef65876da74e7c9ce731c7e8&oe=6054D1D7"
            }
          ],
          "statistics": {
            "actual": {
              "likeCount": 10,
              "shareCount": 32,
              "commentCount": 0,
              "loveCount": 5,
              "wowCount": 0,
              "hahaCount": 0,
              "sadCount": 0,
              "angryCount": 0,
              "thankfulCount": 0,
              "careCount": 0
            },
            "expected": {
              "likeCount": 2,
              "shareCount": 5,
              "commentCount": 3,
              "loveCount": 4,
              "wowCount": 1,
              "hahaCount": 1,
              "sadCount": 1,
              "angryCount": 0,
              "thankfulCount": 0,
              "careCount": 1
            }
          },
          "account": {
            "id": 9967332,
            "name": "Innu Takuaikan Uashat mak Mani-utenam",
            "handle": "",
            "profileImage": "https://scontent-sjc3-1.xx.fbcdn.net/v/t1.0-1/p200x200/86354059_2510106442563154_6755911830654156800_n.jpg?_nc_cat=108&ccb=3&_nc_sid=dbb9e7&_nc_ohc=khZ1jhwWt8sAX9aINO0&_nc_ht=scontent-sjc3-1.xx&tp=6&oh=e8df41743550947de48e59df4d8b832a&oe=6052C47B",
            "subscriberCount": 3617,
            "url": "https://www.facebook.com/1834379636802508",
            "platform": "Facebook",
            "platformId": "1834379636802508",
            "accountType": "facebook_page",
            "pageAdminTopCountry": "CA",
            "verified": false
          },
          "imageText": "Bureau politique dotgnais I COMMUNIQUÉ PRESSE POUR DIFFUSION IMMÉDIATE FINANCEMENT MAJEUR VISANT À CONTRER CRISE DU MANI-UTENAM de 200 unités Mani-utenam, (ITUM) préliminair p abordables, une ériode Conseil l'obtention Takuaikan mak Mani- majeur pour ogements par Autochtones projet surpopulation difficulté maisons). travers besoins. des logements Canada. n permettrait parcourir besoins combler déclaré Mike Mckenzie, membres Conseil entend d'ITUM soucie pour offrir sans question travail SOURCE: Innu Uashat mak RENSEIGNEMENTS: (ITUM) Secteur communications| ITUM Téléphone:4 962-0327, poste 5315 418444-3264",
          "legacyId": 0,
          "id": "9967332|2818911758349286"
        },

        Attention, cependant:

        omg

        Autre exemple avec une liste de politiciens dont on souhaite recueillir les plus récentes publications dans Instagram. L'appel comporte plus de paramètres, notamment endDate pour dire à l'API jusqu'à quelle date/heure chercher, et un timeframe pour dire quelle période couvrir avant cette date/heure de fin.

        https://api.crowdtangle.com/posts?token={votreToken}&listIds=1463906&count=100&sortBy=date&timeframe=24%20HOUR&endDate=2021-01-16T22:00:00

      • endpoint posts/search

        Accessible sur demande seulement! Pour des recherches sur l'ensemble du contenu indexé par CrowdTangle (nuance importante, plus bas), ou pour des recherches par pays.

        Nécessite l'utilisation d'une expression à rechercher. Pour maximiser la collecte, on peut s'inspirer de regex et faire une recherche pour «[a-b][0-9]».

        Exemple. Ici, on demande à CT de retourner des posts de pages administrées au Canada, publiés le 1er juillet 2020, des les ordonner par nombre d'interactions et de nous afficher du 3300e au 3399e post.

        https://api.crowdtangle.com/posts/search?token={votreToken}&startDate=2020-07-01&endDate=2020-07-02&sortBy=total_interactions&platforms=facebook&accountTypes=facebook_page&pageAdminTopCountry=CA&searchTerm=a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,1,2,3,4,5,6,7,8,9,0&count=100&offset=3300

Autres limites

  • Attention à l'illusion de la totalité.

    • Par défaut, CrowdTangle ne couvre pas TOUT Facebook.
    • Plus de 6M de pages, groupes publics et profils vérifiés de Facebook, plus de 2M de profils Instagram publics et plus de 20k des subs les plus actifs dans Reddit. Pour les pages, le % de couverture diminue avec le nombre d'abonnés ou de «j'aime» pour cette page.

    • Cela dit, dès lors qu'une page ou un groupe est ajouté à une liste, CT va le suivre.
  • Les données de CrowdTangle ne semblent pas cohérentes.

    • En février et en juillet 2020, j'ai effectué 24 extractions rigoureusement identiques avec cette liste de 101 médias du Québec.
    • J'ai demandé à CT de me sortir tous les posts publiés par ces pages durant l'année 2018, une journée à la fois avec les paramètres startDate et endDate:
    for date in listeDates:
    	date2 = date + timedelta(days=1)
    	url = "https://api.crowdtangle.com/posts?token={0}&startDate={1}-{2:02d}-{3:02d}&endDate={4}-{5:02d}-{6:02d}&listIds=1341703&count=100".format(jeton,date.year,date.month,date.day,date2.year,date2.month,date2.day)
    • CrowdTangle m'a retourné, à chaque extraction, un nombre de posts différent, entre 99 318 et 82 244.
    wtf
    • Au final, j'avais 104 423 posts uniques. Seulement 75 261 se retrouvaient dans toutes les 24 extractions effectuées.
    omg
  • Les conditions d'utilisation de CrowdTangle sont restrictives.

    No-no
    • Problème pour publications qui exigent qu'on rende accessibles nos données.
    • Pourtant, dans son infolettre, CrowdTangle fait des liens vers des articles qui ont utilisé CT.
    Infolettre de CrowdTangle Données dispo!
    Données tronquées
    • Il semble donc y avoir des solutions de rechange.
  • CrowdTangle ne donne accès à aucun commentaire.

    • Si les commentaires sont votre objet de recherche, c'est mal barré.
    • Mais ici aussi, il y a des solutions de rechange. Le champ platformId correspond à un numéro d'identification unique d'une publication Facebook.
    • Prenons l'exemple de celui-ci: 255561392521_10157929543417522
    • Si on ajoute https://www.facebook.com/ avant, on obtient l'URL de la publication (par le journal Le Canada français, le 31 décembre dernier).
    • On peut ensuite entrer cet URL dans un autre outil: Export Comments
    • Il vous produit un fichier xlsx un peu mal foutu, mais contenant les commentaires, le nom des personnes qui les ont rédigés et leur ID Facebook.
    • Dispose d'un API, que je n'ai jamais essayé, car il n'est pas gratuit.
    • Pourrait être utilisé en complément de CrowdTangle.

Autres ressources

  • Il peut être possible de moissonner directement des pages Facebook en utilisant plutôt la version mobile d'une page. Il suffit de changer www par m dans l'URL de la page en question (ou de tout autre type de contenu sur FB). La version mobile est plus facile à moissonner avec BeautifulSoup, par exemple.

  • Comment consulter plusieurs «pages» d'un API?

    • Recette python d'une boucle while.
      offset = 0 # initialisez cette variable à zéro
      url = "https://api.crowdtangle.com/posts?token={}&listIds={}&count=100".format(jeton,liste)
      print(url)
      req = requests.get(url)
      posts = req.json()
      for post in posts["result"]["posts"]:
    	<extrayez les infos qui vous intéressent>
    
      while "nextPage" in posts["result"]["pagination"]:
      	offset += 100
      	url = "https://api.crowdtangle.com/posts?oken={}&listIds={}&count=100&offset={}".format(jeton,liste,offset) # ajoutez le paramètre "offset" à votre requête
      	print(url)
      	req = requests.get(url)
      	posts = req.json()
      	for post in posts["result"]["posts"]:
    		<extrayez les infos qui vous intéressent>
      print("~"*10)
  • Quelles données sont couvertes par CrowdTangle

  • Academic FAQ

  • Naomi Shiffman, Academic Lead

Vous avez apprécié ce répertoire? Faites-le savoir en cliquant sur ⭐