package mediawiki.task; import java.util.HashMap; import java.util.List; import datasets.in.GeoNames; import mediawiki.MediaWikiUtil; import mediawiki.WikidataQuery; import mediawiki.MediaWikiConnection; import mediawiki.MediaWikiTask; import mediawiki.info.wikibase.Claim; import mediawiki.info.wikibase.Property; import mediawiki.info.wikibase.Reference; import mediawiki.info.wikibase.WikibaseCoordinate; import mediawiki.info.wikibase.WikibaseDate; import mediawiki.info.wikibase.snaks.DateSnak; import mediawiki.info.wikibase.snaks.ItemSnak; import mediawiki.request.wikibase.GetSpecificStatementRequest; public class GeoNamesStateTask extends MediaWikiTask { public GeoNamesStateTask(MediaWikiConnection con) { super(con); } @Override public void run() { System.out.println("load country matrix"); WikidataQuery countries = new WikidataQuery("CLAIM[297]"); HashMap<String,String> c = new HashMap<>(); try { List<Integer> c2 = countries.request(); System.out.println(c2); for(Integer i : c2){ c.put((String) getConnection().request(new GetSpecificStatementRequest("Q"+i, new Property(297))).get(0).getClaim().getSnak().getValue(), "Q"+i); } System.out.println(c.size()+" countries loaded"); List<Integer> places = new WikidataQuery("CLAIM[625] AND NOCLAIM[17] AND CLAIM[131]").request(); System.out.println(places.size()+" places loaded"); for(Integer i : places){ try{ WikibaseCoordinate coord = (WikibaseCoordinate) getConnection().request(new GetSpecificStatementRequest("Q"+i, new Property(625))).get(0).getClaim().getSnak().getValue(); if(coord == null) continue; String iso = GeoNames.getCountryCode(coord.getLatitude(), coord.getLongitude()); String country = c.get(iso); if(country == null) continue; Reference ref = new Reference(); ref.addClaim(new Claim(248, 830106)); ref.addClaim(new Claim(813, new DateSnak(new WikibaseDate(WikibaseDate.ONE_DAY)))); MediaWikiUtil.addClaim(getConnection(), "Q"+i, new Claim(17, new ItemSnak(Integer.parseInt(country.substring(1)))), ref, "based on GeoNames"); }catch(Exception e){ System.err.println(e.getClass().getCanonicalName()+": "+e.getMessage()); } } } catch(Exception e){ e.printStackTrace(); } } }