2010-03-25 14 views
0

Je suis en train de créer une application web Java-grattage pour extraire du contenu à partir d'une variété de sites Web populaires: youtube, facebook, rapidshare, et ainsi de suite.Web scraping: comment obtenir une implémentation de scraper à partir d'un lien texte?

L'application comprendra une fonction de recherche pour trouver des URL de contenu, mais devrait également permettre à l'utilisateur de coller une URL dans l'application si elle est déjà là où se trouve le média. Youtube Downloader fait déjà cela pour une variété de sites vidéo. Lorsque le programme est fourni avec une URL, il décide du type de grattoir à utiliser pour obtenir le contenu; par exemple, un lien de surveillance YouTube renvoie un YoutubeScraper, un lien de page de fans Facebook renvoie un FacebookScraper et ainsi de suite.

Dois-je utiliser le modèle d'usine pour le faire?

Mon idée est que l'usine a une méthode publique. Il prend un argument String représentant un lien et renvoie une implémentation appropriée de l'interface Scraper. Je suppose que l'Usine contiendrait une liste d'implémentations de Scraper, et ferait correspondre le lien avec chaque Scraper jusqu'à ce qu'il trouve un lien approprié. S'il n'y en a pas, il lance une exception à la place.

Répondre

0

Cela semble être une bonne idée. Vous voulez probablement un singleton avec une méthode create (URL url). Je vous recommande d'utiliser TDD pour faire cela afin de clarifier vos besoins.

+0

Merci pour le conseil. Je suis d'accord que le passage d'un argument URL serait mieux que de passer une chaîne. –

0

Une usine retournant les choses ira bien. Pour généraliser la tentative, je vous recommande d'utiliser une carte pour la tenue des implémentations, i.e. .: Plus tard

Map<String, Class<Scraper>> scrapers = new HashMap<String, Scraper>(); 
scraper.put("facebook.com", FacebookScraper.class); 
... 

vous pouvez vérifier l'URL avec les clés de la carte et instancier la bonne classe pour ce contenu.

+0

Merci, je pense qu'une carte d'urls à grattoirs serait un bon moyen de s'y prendre. Mais comme l'a dit Thorbjørn, le type exact devrait être Map >. –