package mediawiki.task; import java.io.IOException; import java.util.Collections; import java.util.List; import org.json.JSONException; import mediawiki.MediaWikiConnection; import mediawiki.MediaWikiTask; import mediawiki.WikidataQuery; import mediawiki.info.Project; import mediawiki.info.wikibase.Property; import mediawiki.info.wikibase.Sitelink; import mediawiki.info.wikibase.Statement; import mediawiki.request.wikibase.GetSitelinkRequest; import mediawiki.request.wikibase.GetSpecificStatementRequest; import mediawiki.request.wikibase.RemoveSitelinkRequest; import mediawiki.request.wikibase.SetSitelinkRequest; public class ReorganizeCommonscatTask extends MediaWikiTask { public ReorganizeCommonscatTask(MediaWikiConnection con) { super(con); // TODO Auto-generated constructor stub } @Override public void run() { WikidataQuery wdq = new WikidataQuery("CLAIM[910] AND CLAIM[373]"); List<Integer> l; try { l = wdq.request(); } catch (IOException | JSONException e1) { e1.printStackTrace(); return; } Collections.shuffle(l); int i = 0; for(int b : l){ i++; if(i % 100 == 0) System.out.println("------------------\nITEM "+i+" = "+((double)i/(double)l.size()*100)+" %"); try{ Statement hkat = getConnection().request(new GetSpecificStatementRequest("Q"+b, new Property(910))).get(0); Statement ckat = getConnection().request(new GetSpecificStatementRequest("Q"+b, new Property(373))).get(0); int hkatitem = (Integer)hkat.getClaim().getSnak().getValue(); String commonscat = (String) ckat.getClaim().getSnak().getValue(); System.out.println("Q"+b+""); if(getConnection().request(new GetSitelinkRequest("Q"+hkatitem, new Project("commonswiki"))) != null) continue; Sitelink oldcommons = getConnection().request(new GetSitelinkRequest("Q"+b, new Project("commonswiki"))); String summary = ""; if(oldcommons != null && oldcommons.getTitle().equals("Category:"+commonscat)){ getConnection().request(new RemoveSitelinkRequest("Q"+b, new Project("commonswiki"), "moving the commons sitelink to [[Q"+hkatitem+"]] based on [[Property:P910]]")); summary = "moving the commons sitelink from [[Q"+b+"]] based on topic's main category"; }else summary = "adding commons sitelink based on [[Property:P373]] and [[Property:P910]] claim of [[Q"+b+"]]"; getConnection().requestConcurrently(new SetSitelinkRequest("Q"+hkatitem, new Sitelink(new Project("commonswiki"), "Category:"+commonscat), summary)); System.out.println(summary); }catch(Exception e){ e.printStackTrace(); } } } }