package mediawiki.task; import java.util.List; import java.util.Map; import mediawiki.MediaWikiConnection; import mediawiki.MediaWikiUtil; import mediawiki.info.Article; import mediawiki.info.wikibase.Claim; import mediawiki.info.wikibase.Property; import mediawiki.info.wikibase.Reference; import mediawiki.info.wikibase.WikibaseCoordinate; import mediawiki.info.wikibase.snaks.CoordinateSnak; import mediawiki.info.wikibase.snaks.ItemSnak; import mediawiki.request.GetTemplatesValuesRequest; import mediawiki.request.TemplateEmbeddedInRequest; import mediawiki.request.WikiBaseItemRequest; public class CoordinatesTask extends WikipediaWikidataTask { public CoordinatesTask(MediaWikiConnection wikidata, MediaWikiConnection wikipedia) { super(wikidata, wikipedia); } @Override public void run() { try{ TemplateEmbeddedInRequest p = new TemplateEmbeddedInRequest("Vorlage:Coordinate", 0); p.setProperty("eidir", "descending"); List<Article> a = getWikipediaConnection().request(p); setTogo(a.size()); System.out.println("Alle Koordinaten geladen!"); for(Article ac : a){ if(isStopped()) return; try{ if(ac.getTitle().indexOf("Liste") >= 0) continue; String base = (String) getWikipediaConnection().request(new WikiBaseItemRequest(ac)); if(base == null){ increaseDone(); continue; } if(getWikipediaConnection().request(new GetTemplatesValuesRequest(ac, "All coordinates")).size() > 0){ increaseDone(); continue; } List<Map<String,String>> ts = getWikipediaConnection().request(new GetTemplatesValuesRequest(ac, "Coordinate")); if(ts.size() != 1){ increaseDone(); continue; } Map<String, String> v = ts.get(0); if(v.containsKey("globe") && !v.get("globe").equals("earth") && !v.get("globe").equals("")){ increaseDone(); continue; } if(v.get("NS").equals("") || v.get("EW").equals("")){ increaseDone(); continue; } WikibaseCoordinate coord = WikibaseCoordinate.parse(v.get("NS"), v.get("EW")); MediaWikiUtil.addClaim(getConnection(), base, new Claim(625, new CoordinateSnak(coord)), new Reference(new Property(143), new ItemSnak(48183)),"based on coordinates-template on dewiki"); }catch(Exception e){ e.printStackTrace(); continue; } increaseDone(); } }catch(Exception e){ e.printStackTrace(); } fireCompletedEvent(); } }