SHARE
TWEET

Untitled

a guest Feb 18th, 2019 78 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Reflection;
  7. using System.Text;
  8. using System.Text.RegularExpressions;
  9. using System.Threading.Tasks;
  10.  
  11.  
  12. namespace MediviaParser
  13. {
  14.     class Program
  15.     {
  16.         private static string highscoresUrl = "https://medivia.online/highscores/prophecy/$vocation$/level";
  17.  
  18.         static void Main(string[] args)
  19.         {                        
  20.             try
  21.             {
  22.                 List<Player> playerList = GetHighscorePlayers();
  23.  
  24.                 foreach(Player player in playerList)
  25.                 {
  26.                     GetPlayerInformation(player);
  27.                     Console.WriteLine(string.Format("Player: {0}, {1}, {2}. Tasks: {3}", player.Name, player.Vocation, player.Level, string.Join(", ", player.Tasks)));
  28.                 } // end foreach
  29.  
  30.                 Console.Write(Environment.NewLine + "Player listing completed. Exporting to CSV...");
  31.  
  32.                 ExportToCsv(playerList);
  33.  
  34.                 Console.Write(" Done.");
  35.  
  36.                 Console.ReadLine();
  37.             }
  38.             catch (Exception ex)
  39.             {
  40.                 Console.WriteLine(ex.Message);
  41.                 Console.ReadLine();
  42.             } // end try            
  43.         }
  44.  
  45.         public static List<Player> GetHighscorePlayers()
  46.         {
  47.             List<Player> playerList = new List<Player>();
  48.  
  49.             List<Vocation> vocationSearchList = new List<Vocation>(){
  50.                     Vocation.Sorcerer,
  51.                     Vocation.Cleric,
  52.                     Vocation.Scout,
  53.                     Vocation.Warrior
  54.                 };
  55.  
  56.             foreach (Vocation vocation in vocationSearchList)
  57.             {
  58.                 StreamReader reader = null;
  59.                 WebResponse response = null;
  60.                 string result = string.Empty;
  61.  
  62.                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(CreateHighscoresUrl(vocation));
  63.                 request.Method = "GET";
  64.                 using (response = request.GetResponse())
  65.                 {
  66.                     using (reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
  67.                     {
  68.                         result = reader.ReadToEnd();
  69.  
  70.                         Regex regex = new Regex("<a href=\"/community/character/(.*?)\">", RegexOptions.IgnoreCase);
  71.                         List<string> names = new List<string>();
  72.  
  73.                         foreach (Match match in regex.Matches(result))
  74.                         {
  75.                             for (int i = 0; i < regex.GetGroupNames().Length; i++)
  76.                             {
  77.                                 string groupName = regex.GetGroupNames()[i];
  78.                                 string matchValue = match.Groups[groupName].Value;
  79.  
  80.                                 if (!matchValue.Contains("href"))
  81.                                 {
  82.                                     string playerName = ReplaceHtml(matchValue);
  83.                                     Player player = new Player(playerName, vocation, CreateCharacterUrl(playerName));
  84.                                     playerList.Add(player);
  85.                                     names.Add(playerName);
  86.                                 } // end if
  87.                             } // end for
  88.                         } // end foreach
  89.  
  90.                         System.Threading.Thread.Sleep(1000);
  91.                     } // end using
  92.                 } // end using                                        
  93.             } // end foreach      
  94.  
  95.             return playerList;
  96.         }
  97.  
  98.         public static void GetPlayerInformation(Player player)
  99.         {
  100.             string result = string.Empty;
  101.             StreamReader reader = null;
  102.             WebResponse response = null;
  103.             List<string> taskList = new List<string>();
  104.  
  105.             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(player.CharacterUrl);
  106.             request.Method = "GET";
  107.             using (response = request.GetResponse())
  108.             {
  109.                 using (reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
  110.                 {
  111.                     result = reader.ReadToEnd();
  112.  
  113.                     player.Level = ParsePlayerLevel(result);
  114.                     player.Tasks = ParseTaskList(result);
  115.  
  116.                     System.Threading.Thread.Sleep(1000);
  117.                 } // end using
  118.             } // end using
  119.         }
  120.  
  121.         public static string CreateHighscoresUrl(Vocation vocation)
  122.         {
  123.             string vocationString = string.Empty;
  124.  
  125.             switch (vocation)
  126.             {
  127.                 case Vocation.Sorcerer:
  128.                     vocationString = "sorcerers";
  129.                     break;
  130.                 case Vocation.Cleric:
  131.                     vocationString = "clerics";
  132.                     break;
  133.                 case Vocation.Scout:
  134.                     vocationString = "scouts";
  135.                     break;
  136.                 case Vocation.Warrior:
  137.                     vocationString = "warriors";
  138.                     break;            
  139.             }
  140.  
  141.             return highscoresUrl.Replace("$vocation$", vocationString);
  142.         }
  143.  
  144.         public static string CreateCharacterUrl(string name)
  145.         {
  146.             return $"https://medivia.online/community/character/{name}";
  147.         }
  148.  
  149.         public static string ReplaceHtml(string name)
  150.         {
  151.             return WebUtility.HtmlDecode(name);
  152.         }
  153.  
  154.         public static int ParsePlayerLevel(string sourceHtml)
  155.         {
  156.             int level = 0;
  157.  
  158.             Regex regex = new Regex("<div class=\"med-width-50\">level:</div><div class=\"med-width-50\">(.*?)</div>", RegexOptions.IgnoreCase);
  159.             Match match = regex.Match(sourceHtml);
  160.  
  161.             if (match.Success)
  162.                 level = Convert.ToInt32(match.Groups[1].Value);
  163.  
  164.             return level;
  165.         }
  166.  
  167.         public static List<string> ParseTaskList(string sourceHtml)
  168.         {
  169.             List<string> taskList = new List<string>();
  170.             Regex regex = new Regex("<div class=\"med-width-25\">(.*?)</div><div class=\"med-width-75\">Total of (.*?) creatures were killed.</div></div>", RegexOptions.IgnoreCase);            
  171.  
  172.             foreach (Match match in regex.Matches(sourceHtml))
  173.             {
  174.                 string groupName = regex.GetGroupNames()[1];
  175.                 string matchValue = match.Groups[groupName].Value;
  176.  
  177.                 taskList.Add(matchValue);
  178.             } // end foreach
  179.  
  180.             return taskList;
  181.         }
  182.  
  183.         public static void ExportToCsv(List<Player> playerList)
  184.         {            
  185.             var csv = new StringBuilder();
  186.            
  187.             foreach(Player player in playerList)
  188.             {
  189.                 var newLine = string.Format("{0},{1},{2},{3}", player.Name, player.Vocation, player.Level, string.Join(", ", player.Tasks));
  190.                 csv.AppendLine(newLine);
  191.             } // end foreach            
  192.  
  193.             File.WriteAllText($"C:\\Temp\\Prophecy-TaskList-{DateTime.Now.ToString("ddMMyyyy_hhmmss")}.csv", csv.ToString());
  194.         }
  195.     }
  196.  
  197.     public enum Vocation
  198.     {
  199.         Sorcerer,
  200.         Cleric,
  201.         Scout,
  202.         Warrior
  203.     }
  204.  
  205.     public class Player
  206.     {
  207.         string name, characterUrl;
  208.         int level;
  209.         List<string> tasks;
  210.         Vocation vocation;        
  211.  
  212.         public Player(string name, Vocation vocation, string characterUrl)
  213.         {
  214.             Name = name;
  215.             Vocation = vocation;
  216.             CharacterUrl = characterUrl;
  217.         }
  218.  
  219.         public string Name { get => name; set => name = value; }
  220.         public string CharacterUrl { get => characterUrl; set => characterUrl = value; }
  221.         public int Level { get => level; set => level = value; }
  222.         public List<string> Tasks { get => tasks; set => tasks = value; }
  223.         public Vocation Vocation { get => vocation; set => vocation = value; }
  224.     }
  225. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top