package mediawiki.task; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import mediawiki.ArticleDenier; import mediawiki.MediaWikiConnection; import mediawiki.info.Article; import mediawiki.info.Language; import mediawiki.info.wikibase.Claim; import mediawiki.info.wikibase.Property; import mediawiki.info.wikibase.Reference; import mediawiki.info.wikibase.WikibaseDate; import mediawiki.info.wikibase.snaks.DateSnak; import mediawiki.info.wikibase.snaks.ItemSnak; import mediawiki.info.wikibase.snaks.StringSnak; import mediawiki.request.CategoryMemberRequest; import mediawiki.request.GetTemplateValuesRequest; import mediawiki.request.WikiBaseItemRequest; import mediawiki.request.wikibase.GetDescriptionRequest; import mediawiki.request.wikibase.GetSpecificStatementRequest; import mediawiki.request.wikibase.SetDescriptionRequest; import static mediawiki.MediaWikiUtil.addClaim; /** * PersonendatenTask for dewiki. */ public class PersonendatenTask extends WikipediaWikidataTask { private String kat; private Claim[] claims; private Article startAt; private Reference ref; private ArticleDenier denier; public PersonendatenTask(MediaWikiConnection con, MediaWikiConnection wikipedia, String kat, Claim...claims) { super(con,wikipedia); this.kat = kat; this.claims = claims; ref = new Reference(new Property(143), new ItemSnak(48183)); } @Override public void run() { try { SimpleDateFormat log = new SimpleDateFormat("HH:mm:ss"); CategoryMemberRequest cmr = new CategoryMemberRequest(kat,0); cmr.setProperty("cmdir", "newer"); List<Article> articles = getWikipediaConnection().request(cmr); setTogo(articles.size()); recordETA(); boolean f = (startAt == null ? false : true); for(Article a : articles){ if(isStopped()) return; if(a.isIdentical(startAt)) f = false; if(f){ increaseDone(); continue; } if(denier != null && denier.isDeniable(a)){ increaseDone(); continue; } try{ String base = (String) getWikipediaConnection().request(new WikiBaseItemRequest(a)); if(base == null){ increaseDone(); continue; } if(getConnection().request(new GetSpecificStatementRequest(base, new Claim(31, new ItemSnak(5)))).size() == 0){ System.err.println(base+" isn't a human!"); increaseDone(); continue; } Map<String,String> t = getWikipediaConnection().request(new GetTemplateValuesRequest(a.getTitle(), "Personendaten")); if(t != null){ String desc = t.get("KURZBESCHREIBUNG"); if(desc != null){ desc = desc.replaceAll("\\[\\[([\\p{IsAlphabetic}\\s]+\\|)?([\\p{IsAlphabetic}\\s]+)\\]\\]", "$2"); if(desc.indexOf('[') == -1 && desc.indexOf('{') == -1){ String title = (String)getConnection().request(new GetDescriptionRequest(base, new Language("de"))); if(title == null){ getConnection().request(new SetDescriptionRequest(base, new Language("de"), desc, "based on dewiki person data")); System.out.println(Thread.currentThread().getName()+"\t["+log.format(new Date())+"]\t"+base+" has now a description: "+desc); } } } if(t.get("GEBURTSDATUM") != null){ WikibaseDate wbd = WikibaseDate.parseWikipediaDate(t.get("GEBURTSDATUM")); if(wbd != null){ addClaim(getConnection(), base, new Claim(new Property(569),new DateSnak(wbd)), ref, "processed by Kaspar using person data on dewiki"); } } if(t.get("STERBEDATUM") != null){ WikibaseDate wbd = WikibaseDate.parseWikipediaDate(t.get("STERBEDATUM")); if(wbd != null){ addClaim(getConnection(), base, new Claim(new Property(570),new DateSnak(wbd)), ref, "processed by Kaspar using person data on dewiki"); } } } HashMap<String,String> n = (HashMap<String, String>) getWikipediaConnection().request(new GetTemplateValuesRequest(a.getTitle(), "Normdaten")); if(n != null){ if(n.get("GND") != null && ! n.get("GND").equals("")){ addClaim(getConnection(), base, new Claim(new Property(227),new StringSnak(n.get("GND"))), ref, "processed by Kaspar using authority data on dewiki"); } // if(n.get("LCCN") != null && ! n.get("LCCN").equals("")){ // addClaim(getConnection(), base, new Claim(new Property(244),new StringSnak(n.get("LCCN"))), ref, "processed by Kaspar using authority data on dewiki"); // } if(n.get("NDL") != null && ! n.get("NDL").equals("")){ addClaim(getConnection(), base, new Claim(new Property(349),new StringSnak(n.get("NDL"))), ref, "processed by Kaspar using authority data on dewiki"); } if(n.get("VIAF") != null && ! n.get("VIAF").equals("")){ addClaim(getConnection(), base, new Claim(new Property(214),new StringSnak(n.get("VIAF"))), ref, "processed by Kaspar using authority data on dewiki"); } } HashMap<String,String> imdb = (HashMap<String, String>) getWikipediaConnection().request(new GetTemplateValuesRequest(a.getTitle(), "IMDb Name")); if(imdb != null){ if(imdb.get("1") != null && ! imdb.get("1").equals("")){ addClaim(getConnection(), base, new Claim(new Property(345),new StringSnak("nm"+imdb.get("1"))), ref, "processed by Kaspar using imdb data on dewiki"); } } for(Claim c : claims){ addClaim(getConnection(), base, c, ref, "processed by Kaspar using "+kat); } }catch(Exception e){ e.printStackTrace(); continue; } increaseDone(); } } catch (Exception e) { e.printStackTrace(); } fireCompletedEvent(); } public void setStartAt(Article startAt) { this.startAt = startAt; } public Article getStartAt() { return startAt; } public Reference getReference() { return ref; } public void setReference(Reference ref) { this.ref = ref; } public ArticleDenier getDenier() { return denier; } public void setDenier(ArticleDenier denier) { this.denier = denier; } }