1. Crowl the World
INSTAGRAM
Projet final ISN 3ème année ESILV
Groupe 18:
BIZERAY Jeritiana
DEEL Absalon
GHEUNG Nicolas
HARBEMONT Benoît
RUI Alessandro
2. • Multithreading C# - Visual Studio
• Classes InstaSharp
• Système de Gestion de Base de Donnée – Langage MySQL
• Classes et méthodes génériques (Templates)
• Fenêtres WPF en C#
• Travail d’équipe via mise en place d’un TFS(Team Foundation Server) - Visual Studio
Crowl the World
Technologies Utilisées
Groupe 18
3. Crowl the World
Démarche suivie
• Découpage en 10 parties pour
plus de rapidité (10 comptes
Instagram)
Zoom sur une partie du
traitement.
• Coordonnées de Paris
• Discrétisation de la ville pour
récupérations de Localisations et
Medias
Groupe 18
4. FONCTIONNEMENT D’UN THREAD POUR RECHERCHE
LOCATIONS OU MEDIAS (BALAYAGES)
API
Thread
Recherche
Instagram Authentification
(Via InstaSharp)
Defini les coordonnées à utiliser pour
faire la racherche
Recherche envoyée à instagram
Coordonnées
GPS
2
0
20 résultats
retournés
Mise des resultats dans un buffer
Buffer de type
HashSet<>
IEqualityComparer
Thread Mise
en BD
Récupération de 40 médias selon une
fréquence dépendant de la taille du
buffer
Connexion base de donnée
Mise des resultats dans
la BD
Sleep Variable en
fonction de la
taille du HashSet
Réatribution des
nouvelles
coordonnées
SQL
Server
Locations
iD:BIGINT
Name:TEXT
Latitude:DOUBLE
Longitude:DOUBLE
Media
iD_Media:LONGTEXT, iD_Media(255)
iD_Locations:BIGINT
latitude_Locations:DOUBLE
longitude_Locations:DOUBLE
user_Name:TEXT
Groupe 18
40 résultats
5. FONCTIONNEMENT D’UN THREAD POUR RECHERCHE
MEDIAS OU USERS (LECTURE TXT)
API
Thread
Recherche
Instagram Authentification
(Via InstaSharp)
Lecture dans le fichier texte de la
coordonnée ou du UserName
Recherche envoyée à instagram
Coordonnées
GPS
2
0
20 résultats
retournés
Mise des resultats dans un buffer
Buffer de type
HashSet<>
IEqualityComparer
Thread Mise
en BD
Récupération de 40 médias selon une
fréquence dépendant de la taille du
buffer
40 résultats
SQL
Server
Connexion base de donnée
Mise des resultats dans
la BD
Sleep Variable en
fonction de la
taille du HashSet
Réatribution des
nouvelles
coordonnées ou
nouveau
userName
Users
iD_User:BIGINT
user_name:TEXT
full_name:TEXT
Media
iD_Media:LONGTEXT, iD_Media(255)
iD_Locations:BIGINT
latitude_Locations:DOUBLE
longitude_Locations:DOUBLE
user_Name:TEXT
Groupe 18
7. MODELE VUE CONTROLEUR
Model_Comparer(Abstraite)
LocationComparer
…
+public LocationComparer()
+Equals(Location l1, Location
l2):bool
+GetHashCode(Location l):int
MediaComparer
+public MediaComparer()
+Equals(Media l1, Media
l2):bool
+GetHashCode(Media l):int
UserComparer
+public UserComparer()
+Equals(User l1, User
l2):bool
+GetHashCode(User l):int
IEqualityComparer<User>IEqualityComparer<Media>
IEqualityComparer<Location>
Model_Pers(Abstraite)
…
Location
+Id:int
+Latitude:decimal
+Longitude:decimal
+Name:String
Media
+ID:string
+Location :Location
+User:string
+Type : string
…
UserInfo
+fullname:string
+id:string
+username:string
Crowl the World
Groupe 18
8. MODELE VUE CONTROLEUR
RequeteAPI (Abstraite)
-compteur:int
-g1:Gestion_BD
-synchro:object
-threadEnCours:int
-threadBuffer:Thread
+public RequeteAPI(int threadEnCours)
Balayage_Generique<type, typecomparer>
where type : InstaSharp.Models.Model_Pers
where typecomparer : IEqualityComparer<type>, new()
-latitudemin, latitudemax:double
-longitudemin, longitudemax:double
-variationCoordonees:double
-rayon:double
-bufferListeLM: HashSet<type>
+public public Balayage_Generique(string city,
double rayon, double variationCoordonees, int
threadEnCours) : base(threadEnCours)
+RetourneNombreDeBoucles(), RetournePasDeDeplacement:double
+DistanceFromCoordinates(double latitude1, double longitude1,
double latitude2, double longitude2):double
+AjouterDansLeBuffer(double longi, double lati,
InstaSharp.Endpoints.InstagramApi metadonnee)
+SauvegardeBalayage(double longi, double lati)
+Balayage(Authentification a, CoordonneesDepart c)
+ BufferToBD()
+TotalTourBoucle()
LectureTXT_Generique<type, typecomparer>
where type : InstaSharp.Models.Model_Pers
where typecomparer : IEqualityComparer<type>, new()
-bufferListeMU: HashSet<type>
+public LectureTXT_Generique(int threadEnCours) : base(threadEnCours)
+RecupererToutLesIdLocationsEtUserNames(int nbThreadsDispos)
+RequeteMedia(long id, string place, double latitude, double
longitude, InstaSharp.Endpoints.Media muAPIwR)
+RequeteUser(string userName, InstaSharp.Endpoints.Users
muAPIwR)
+MettreDansLeBuffer(List<type> resultListeMU)
+NombresDeBoucles():long
+RecueillirMediaUserEtMetDansLeHashSet(InstaSharp.Endpoints.Ins
tagramApi mediauser)
+ChargerSauvegardeMediaPuisRepartir(StreamReader
monStreamReaderFichierSource, string ligneFichierSource,
InstaSharp.Endpoints.InstagramApi mediauser)
+ChargerSauvegardeUserPuisRepartir(StreamReader
monStreamReaderFichierSource, string ligneFichierSource,
InstaSharp.Endpoints.InstagramApi mediauser)
+BufferToBD()
+FaireRequeteMediaUser(Authentification a)
GestionBD
-connection: MySqlConnection
+task { location, media, user }: enum
+ public GestionBD()
+ TryCreateTable(string nomDeLaTable, string arguments)
+ NombreLigneBD(string table)
+ CreationFichier(MySqlDataReader reader, int thread, task todo)
+ FaireRequeteSQLPourCreationTXT(string TOSELECT, string TABLE,
int nbThreadsDispos, task toDo)
+ InsertMedia(HashSet<InstaSharp.Models.Media> list)
+ InsertLocation(HashSet<InstaSharp.Models.Location> list)
+ InsertUser(HashSet<InstaSharp.Models.User> list)
+ InsertGenerique<TypeInserer>(HashSet<TypeInserer> list)
where TypeInserer : InstaSharp.Models.Model_Pers
Crowl the World
Groupe 18
9. MODELE VUE CONTROLEUR
• Entièrement réalisé en C#
• Un button par compte Instagram
• Une barre de progression par compte
Gérés par des dictionnaires: Dictionary<int, Button> dicoButton,Dictionary<int, ProgressBar> dicoProgressBar
Où int représente le numéro de compte(thread) à lancer
Crowl the World
Groupe 18
10. RÉSULTATS
Points Photos des 5 derniers jours
(⋍12000)
Localisations (⋍220.000 en BD, 45.000
représentées ici)
Crowl the World
Groupe 18