package mediawiki.task; import java.net.URLEncoder; import java.util.Collections; import java.util.List; import mediawiki.MediaWikiConnection; import mediawiki.MediaWikiTask; import mediawiki.WikidataQuery; import mediawiki.info.wikibase.Claim; import mediawiki.info.wikibase.Property; import mediawiki.info.wikibase.Statement; import mediawiki.info.wikibase.snaks.ItemSnak; import mediawiki.request.EditRequest; import mediawiki.request.wikibase.GetSpecificStatementRequest; import mediawiki.request.wikibase.RemoveStatementRequest; import datasets.in.GND; import datasets.in.MARC; public class GndTnTask extends MediaWikiTask { private String log; public GndTnTask(MediaWikiConnection con, String log) { super(con); this.log = log; } @Override public void run() { WikidataQuery n = new WikidataQuery("CLAIM[31:5] AND CLAIM[227]"); List<Integer> i; try { StringBuffer bf = new StringBuffer(); bf.append("== List ==\n"); i = n.request(); Collections.reverse(i); for(Integer b : i) { try{ List<Statement> s = getConnection().request(new GetSpecificStatementRequest("Q"+b, new Property(227))); if(s.size() != 1) continue; Statement st = s.get(0); String gnd = (String) st.getClaim().getSnak().getValue(); MARC m = GND.getMARCEntry(gnd); String typ = m.getSubfield("079", 0, "b", 0); System.out.println("Q"+b+"\t"+gnd+"\t"+typ); if(typ.equals("n")) { if(st.hasReference(new Claim(new Property(143), new ItemSnak(54919)))){ getConnection().requestConcurrently(new RemoveStatementRequest(st, "remove type Tn = placeholder (see [[Property talk:P227#Usage note]])")); System.out.println("removed"); }else{ bf.append("# [[Q"+b+"]]: [http://d-nb.info/gnd/"+URLEncoder.encode(gnd,"UTF-8")+" "+gnd+"]\n"); } } }catch(Exception e) { e.printStackTrace(); } } EditRequest er = new EditRequest(log, bf.toString(), "refresh"); er.setProperty("section", 1); getConnection().request(er); } catch (Exception e1) { e1.printStackTrace(); } } }