|
|
- package net.jrtechs.www.webCrawler;
-
- import net.jrtechs.www.SteamAPI.APIConnection;
- import net.jrtechs.www.model.Player;
-
- import java.util.*;
-
-
- /**
- * Main class for digging up the entire
- * steam network.
- *
- * @author Jeffery Russell 11-18-18
- */
- @Deprecated
- public class SteamWebCrawler
- {
- /** Object used to limit the speed at which I access the steam
- * network */
- private APIThrottler throttler;
-
- /** Connection to the steam network */
- private APIConnection connection;
-
- /** Saves players to the disk */
- private FileIO fileIO;
-
- /** Queue used for a BFS search */
- private LinkedList<Player> downlaodQueue;
-
- /** Players which have been detected by
- * our search and currently in a queue
- * or has already been processed*/
- private HashSet<String> visited;
-
- /** List of players which we have accessed
- * in the steam network, but, have no clue what
- * their name is*/
- private LinkedList<String> namelessQueue;
-
-
- /**
- * Initializes the steam crawler's objects
- */
- public SteamWebCrawler()
- {
- throttler = new APIThrottler();
-
- this.connection = new APIConnection();
-
- this.fileIO = new FileIO("/media/jeff/A4BA9239BA920846/steamData/");
-
- this.downlaodQueue = new LinkedList<>();
-
- visited = new HashSet<>();
-
- namelessQueue = new LinkedList<>();
- }
-
-
- /**
- * If the download queue is empty, this will
- * look up the names of the first 100 players in the
- * nameless queue and add them to download queue.
- */
- private void shiftNamelessToDownload()
- {
- //this is a while instead of if because the getfull players query fails
- //once in a blue moon
- while(this.downlaodQueue.isEmpty() && !this.namelessQueue.isEmpty())
- {
- List<String> winners = new ArrayList<>();
- for(int i = 0; i < (100 < namelessQueue.size()? 100: namelessQueue.size()); i++)
- {
- winners.add(this.namelessQueue.remove());
- }
- List<Player> namedPlayers = connection.getPlayers(winners);
- this.throttler.wait(1);
- downlaodQueue.addAll(namedPlayers);
- }
- }
-
-
- /**
- * Does one of the following three actions for each
- * of the steam members in the list:
- * 1: Ignore- already has been queued by program
- * 2: Add to nameless queue -- doesn't have name yet
- * 3: Add to download queue -- already on HHD but needed for
- * the search algo to work.
- *
- * @param ids list of steam ids
- */
- private void queueUpPlayers(List<String> ids)
- {
- for(String s: ids)
- {
- if(!visited.contains(s))
- {
- if(fileIO.playerExists(s))
- {
- //downlaodQueue.add(new Player("dummy", s));
- }
- else
- {
- namelessQueue.add(s);
- }
- visited.add(s);
- }
- }
- System.out.println("Download Queue: " + downlaodQueue.size());
- System.out.println("Nameless Queue: " + namelessQueue.size());
- }
-
-
-
-
- /**
- * Runs a BFS search of the steam network
- */
- private void runCrawler()
- {
- while(!downlaodQueue.isEmpty())
- {
- Player current = downlaodQueue.remove();
-
- List<String> currentFriends;
- if(!fileIO.playerExists(current.getId()))
- {
- this.throttler.wait(1);
- currentFriends = connection.getFriends(current.getId());
- fileIO.writeToFile(current, currentFriends);
- }
- else
- {
- currentFriends = fileIO.readFriends(current.getId());
- }
-
- queueUpPlayers(currentFriends);
-
- shiftNamelessToDownload();
- }
- }
-
-
- /**
- * pop first fiend on the queue
- * and release the beast
- *
- * @param baseID
- */
- public void runSteamCrawlerBase(String baseID)
- {
- //downlaodQueue.add(new Player("jrtechs", baseID));
- runCrawler();
- }
-
-
-
- public static void main(String args[])
- {
- new SteamWebCrawler().runSteamCrawlerBase("76561198188400721");
- }
- }
|