Przejdź do zawartości

Wikipedysta:PBbot/drzewo informatyki: Różnice pomiędzy wersjami

Z Wikipedii, wolnej encyklopedii
Usunięta treść Dodana treść
skreślono 15 pozycji
kod
Linia 3084: Linia 3084:
*****[[:Kategoria:XML]] (33) ⤶
*****[[:Kategoria:XML]] (33) ⤶
****[[:Kategoria:Wyszukiwarki internetowe]] (110) ⤶
****[[:Kategoria:Wyszukiwarki internetowe]] (110) ⤶
<!--
package com.github.wikibot.main;

import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.Collator;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.regex.Pattern;

import javax.security.auth.login.AccountLockedException;

import org.wikipedia.Wiki;

import com.github.wikibot.utils.DBUtils;
import com.github.wikibot.utils.Login;
import com.github.wikibot.utils.PageContainer;

public final class Test {
public static void main(String[] args) throws Exception {

var SQL_PLWIKI_URI = "jdbc:mysql://localhost:4711/plwiki_p";
var tree = DBUtils.getRecursiveCategoryTree(SQL_PLWIKI_URI, "Informatyka", Collator.getInstance(Locale.forLanguageTag("pl")));
var sb = new StringBuilder();

for (var result : tree) {
sb.append("*".repeat(result.depth()));
sb.append(String.format("[[:Kategoria:%s]] (%d)", result.node().getName(), result.node().getMembers()));

if (result.node().getMinDepth() != result.depth() && !result.node().getChildren().isEmpty()) {
sb.append(" ⤶");
}

sb.append("\n");
}

Files.writeString(Paths.get("./data/temp.txt"), sb.toString());
}
-->
<!--
package com.github.wikibot.main;

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

import javax.security.auth.login.AccountLockedException;

import org.wikipedia.Wiki;

import com.github.wikibot.utils.DBUtils;
import com.github.wikibot.utils.Login;

public final class Test {
public static void main(String[] args) throws Exception {
var wb = Wikibot.newSession("pl.wikipedia.org");
Login.login(wb);

var textWorklist = wb.getPageText(List.of("Wikipedysta:PBbot/drzewo informatyki")).get(0);
var pattWorklist = Pattern.compile("\\*+<s>\\[{2}:Kategoria:(.+?)\\]{2} \\(\\d+\\)</s>", Pattern.MULTILINE);
var exclusions = pattWorklist.matcher(textWorklist).results().map(mr -> mr.group(1)).distinct().toList();

var earliest = OffsetDateTime.of(LocalDate.of(2024, 7, 6), LocalTime.of(0, 48), ZoneOffset.UTC);
var latest = OffsetDateTime.of(LocalDate.of(2024, 7, 7), LocalTime.MIDNIGHT, ZoneOffset.UTC);
var helper = wb.new RequestHelper().inNamespaces(Wiki.TALK_NAMESPACE).withinDateRange(earliest, latest);
var editedTalkPages = wb.contribs(wb.getCurrentUser().getUsername(), helper).stream().map(Wiki.Revision::getTitle).toList();

var SQL_PLWIKI_URI = "jdbc:mysql://localhost:4711/plwiki_p";
// var SQL_PLWIKI_URI = "jdbc:mysql://plwiki.analytics.db.svc.wikimedia.cloud:3306/plwiki_p";
var members = DBUtils.getRecursiveCategoryMembers(SQL_PLWIKI_URI, "Informatyka", exclusions, Wiki.MAIN_NAMESPACE);

var targets = editedTalkPages.stream()
.filter(talkPage -> !members.contains(wb.removeNamespace(talkPage)))
.toList();

System.out.println("Targets: " + targets.size());

var pattTemplate = Pattern.compile("\\{{2}Wikiprojekt:Informatyka/info[^\\}]+?\\}{2}");

var edited = 0;
var errors = new ArrayList<String>();

wb.setMarkMinor(true);

for (var talkPage : targets) {
var text = wb.getPageText(List.of(talkPage)).get(0);

if (text == null) {
System.out.println("No text: " + talkPage);
errors.add(talkPage);
continue;
}

var newText = pattTemplate.matcher(text).replaceFirst("").stripLeading();

if (!newText.equals(text)) {
try {
wb.edit(talkPage, newText, "usunięcie błędnego {{Wikiprojekt:Informatyka/info}}");
} catch (Throwable t) {
t.printStackTrace();
errors.add(talkPage);

if (t instanceof AssertionError || t instanceof AccountLockedException) {
break;
}
}
} else {
System.out.println("No template: " + talkPage);
errors.add(talkPage);
}
}

System.out.println("Edited: " + edited);

if (!errors.isEmpty()) {
System.out.println("Errors:");
errors.forEach(System.out::println);
}
}
}
-->

Wersja z 13:54, 7 lip 2024