Created
April 16, 2013 07:45
-
-
Save voldyman/5394153 to your computer and use it in GitHub Desktop.
manga comic downloader
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace MangaFoxParser { | |
//Delegate for afte comic data is received | |
public delegate void ComicDataCB (List<Comic?> comic); | |
public class ComicDataTask { | |
public unowned ComicDataManager manager; | |
public ComicDataCB callback; | |
public ComicDataTask (ComicDataManager manager) { | |
this.manager = manager; | |
} | |
public void got_message (Soup.Session session, Soup.Message msg) { | |
if (msg.status_code == Soup.KnownStatusCode.OK) { | |
List<Comic?> c_data = manager.parse_comic_data ((string) msg.response_body.data); | |
callback (c_data); | |
} | |
manager.task_list.remove (this); | |
} | |
} | |
public struct Comic { | |
public int rank; | |
public string title; | |
public string image; | |
} | |
public class ComicDataManager { | |
Soup.SessionAsync session; | |
public List<ComicDataTask> task_list; | |
// Methods | |
public ComicDataManager () { | |
session = new Soup.SessionAsync (); | |
task_list = new List<ComicDataTask>(); | |
} | |
public List<Comic?> parse_comic_data (string data) { | |
List<Comic?> coms = new List<Comic?> (); | |
/*try { | |
var parser = new Json.Parser (); | |
parser.load_from_data (data, -1); | |
var root_object = parser.get_root ().dup_object (); | |
//var memebers = root_object.get_members (); | |
root_object.foreach_member ((obj, mem_name, mem_node) => { | |
print (mem_name+"\n"); | |
}); | |
} catch (Error e) { | |
print ("An error occured: %s".printf (e.message)); | |
}*/ | |
var list_regex = new Regex ("""<ul class=".*">((.*?(\R))+.*?)</ul>(\R)"""); | |
MatchInfo list_match_info; | |
list_regex.match (data.replace ("\n", " "), 0, out list_match_info); | |
// print ("Found "+list_match_info.get_match_count ().to_string ()+"\n"); | |
var list = list_match_info.fetch (1); | |
var image_regex = new Regex ("""<a class="manga_img" href="(.*?)".*?>"""); | |
MatchInfo image_match_info; | |
image_regex.match (data, 0, out image_match_info); | |
print ("Found "+image_match_info.get_match_count ().to_string ()+"\n"); | |
print (image_match_info.fetch(1)); | |
return coms.copy (); | |
} | |
public void get_comic_data (owned ComicDataCB callback) { | |
var task = new ComicDataTask (this); | |
task.manager = this; | |
task.callback = (owned) callback; | |
task_list.append (task); | |
//var uri = "http://apify.heroku.com/api/directory.json"; | |
var uri = "http://mangafox.me/directory/"; | |
var message = new Soup.Message ("GET", uri); | |
session.queue_message (message, task.got_message); | |
} | |
private Comic new_comic (string name, string img, string rank_s) { | |
rank_s.replace ("st", ""); | |
return Comic () { | |
rank = int.parse (rank_s), | |
title = name, | |
image = img | |
}; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment