En el grupo de Skype «Elite UBot Studio Users» un usuario quería sacar las direcciones de los perfiles de sus amigos en Facebook.
Esta lista ya no es accesible a través de Graph API Explorer pero si necesitas un script que pueda realizar esta tarea te mostraré los pasos en este tutorial.
Una vez estés autenticado en Facebook, usaremos el comando navigate de UBot para ir a la página donde aparecen los amigos:
Un detalle a tener en cuenta es que necesitaremos hacer scroll hasta abajo porque Facebook muestra más resultados a medida que vas viendo la página.
Esto se conoce como carga diferida o lazy loading y lo vamos a solucionar utilizando el método de javascript scrollTo( ) con el que iremos descendiendo hasta que hayan cargado todos los perfiles.
Puedes variar el número de ciclos según la cantidad de amigos que necesites extraer. Para que te hagas una idea en mi navegador carga unos 20 amigos en cada golpe de scroll.
Una vez has llegado abajo podrás recuperar todas las rutas mediante una expresión regular.
En la siguiente imagen podemos comprobar que hemos obtenido la información correcta.
Como puedes ver, algunas rutas tienen el nombre del perfil con el nombre del amigo, mientras que otras cargan con profile.php y un identificador.
Aquí te dejo la expresión regular con la que puedes capturar los dos tipos de ruta y la explicación de como está compuesta.
https://www\.facebook\.com/.+?(?=(\?fref=pb)?\&) Match the characters “https://www” literally «https://www» Match the character “.” literally «\.» Match the characters “facebook” literally «facebook» Match the character “.” literally «\.» Match the characters “com/” literally «com/» Match any single character that is not a line break character «.+?» Between one and unlimited times, as few times as possible, expanding as needed (lazy) «+?» Assert that the regex below can be matched, starting at this position (positive lookahead) «(?=(\?fref=pb)?\&)» Match the regular expression below and capture its match into backreference number 1 «(\?fref=pb)?» Between zero and one times, as many times as possible, giving back as needed (greedy) «?» Match the character “?” literally «\?» Match the characters “fref=pb” literally «fref=pb» Match the character “&” literally «\&»
También puedes obtener los identificadores de usuario cambiando la expresión regular anterior por esta otra:
(?<=data-profileid=\")\d+