Revision 121003976 of "Benutzer:Inkowik/Test3" on dewiki[[PureBasic]]
<pre>
; -------------------------------------------------------------
; MessageDelivery.pb (MD)
; posting messages on German Wikipedia user talk pages
; -- http://de.wikipedia.org --
;
; Author: Inkowik
; -- http://de.wikipedia.org/wiki/Benutzer:Inkowik --
;
; This code is using the PureBasicWikibot framework (PBWB)
; -------------------------------------------------------------
XIncludeFile "PBWB.pb"
Enumeration
#_MD_XML_WLH
#_MD_XML_CAT
EndEnumeration
Procedure MD_HandleArray(piMode.i)
;
; Array dimensionieren/freigeben
;
If piMode = 0
Global Dim gasUsers.s(500) ; 500 als Obergrenze, erspart Loopen der API-Requests
ElseIf piMode = 1
FreeArray(gasUsers())
EndIf
EndProcedure
Procedure.s MD_TitleNormalizer(psString.s)
;
; Seitentitel anpassen, damit nur Benutzer-Diskussionen bearbeitet werden
;
If Not FindString(psString, "Benutzer Diskussion:")
psString = ReplaceString(psString, "Benutzerin Diskussion:", "Benutzer Diskussion:")
psString = ReplaceString(psString, "User talk:", "Benutzer Diskussion:")
psString = ReplaceString(psString, "Benutzer:", "Benutzer Diskussion:")
psString = ReplaceString(psString, "Benutzerin:", "Benutzer Diskussion:")
psString = ReplaceString(psString, "User:", "Benutzer Diskussion:")
EndIf
ProcedureReturn psString
EndProcedure
Procedure.i MD_WhatLinksHere(psPage.s)
;
; arbeitet über "Links auf diese Seite" -> reine Liste mit Links auf Benutzer
;
Protected sResult.s
Protected *Node
Protected i.i
Protected sUser.s
sResult = PBWB_SendGET("http://de.wikipedia.org/w/api.php?action=query&titles=" + URLEncoder(psPage) + "&prop=links&pllimit=500&format=xml")
If sResult
If CatchXML(#_MD_XML_WLH, @sResult, Len(sResult), 0, #PB_Ascii) And XMLStatus(#_MD_XML_WLH) = #PB_XML_Success
*Node = MainXMLNode(#_MD_XML_WLH) ; <api>
*Node = ChildXMLNode(*Node) ; <query>
*Node = ChildXMLNode(*Node) ; <pages>
*Node = ChildXMLNode(*Node) ; <page>
*Node = ChildXMLNode(*Node) ; <links>
*Node = ChildXMLNode(*Node) ; 1. Childknoten von <links>
i = 0
Repeat
sUser = GetXMLAttribute(*Node, "title") ; Seitentitel aus XML-Attribut lesen
sUser = MD_TitleNormalizer(sUser) ; Titel normalisieren
gasUsers(i) = sUser ; normalisiert, ins Array eintragen
i = i + 1
*Node = NextXMLNode(*Node) ; Pointer auf nächsten Knoten setzen
Until *Node = 0 ; kein weiterer Knoten mehr vorhanden
FreeXML(#_MD_XML_WLH)
EndIf
EndIf
EndProcedure
Procedure MD_CatMember(psCategory.s)
;
; Benutzer aus Kategorie lesen
;
Protected sResult.s
Protected *Node, *Node2
Protected i.i
Protected sUser.s
sResult = PBWB_SendGET("http://de.wikipedia.org/w/api.php?action=query&list=categorymembers&cmtitle=" + URLEncoder(psCategory) + "&cmtype=page&cmnamespace=2&cmlimit=500&format=xml")
If sResult
If CatchXML(#_MD_XML_CAT, @sResult, Len(sResult), 0, #PB_Ascii) And XMLStatus(#_MD_XML_CAT) = #PB_XML_Success
*Node = MainXMLNode(#_MD_XML_CAT) ; <api>
*Node = ChildXMLNode(*Node) ; <query> / <query-continue>
Repeat
If GetXMLNodeName(*Node) = "query" ; Knotenname = <query>
*Node2 = ChildXMLNode(*Node) ; <categorymembers>
*Node2 = ChildXMLNode(*Node2) ; 1. Childknoten von <categorymembers>
i = 0
Repeat
sUser = GetXMLAttribute(*Node2, "title") ; Seitentitel aus XML-Attribut lesen
sUser = MD_TitleNormalizer(sUser) ; Titel normalisieren
gasUsers(i) = sUser ; normalisiert, ins Array eintragen
i = i + 1
*Node2 = NextXMLNode(*Node2) ; Pointer 2 auf nächsten Knoten setzen
Until *Node2 = 0 ; kein weiterer Knoten mehr vorhanden
EndIf
*Node = NextXMLNode(*Node) ; Hauptpointer auf nächsten Knoten setzen
Until *Node = 0 ; kein weiterer Knoten mehr vorhanden
FreeXML(#_MD_XML_CAT)
EndIf
EndIf
EndProcedure
Procedure MD_Send(piMethod.i, psParam.s, psMessage.s)
;
; Nachricht an jeden aus dem zu erstellenden Array versenden
;
Protected i.i
MD_HandleArray(0)
If piMethod = 0 ; "Links auf diese Seite" abfragen
MD_WhatLinksHere(psParam)
ElseIf piMethod = 1 ; Kategorie abfragen
MD_CatMember(psParam)
EndIf
For i = 0 To ArraySize(gasUsers()) ; Elemente nacheinander auslesen
If gasUsers(i) <> ""
PBWB_EditPage("de.wikipedia.org", gasUsers(i), "", "&appendtext=" + PBWB_ToUTF8(psMessage) + "&nocreate=1&bot=1&summary=Bot: Nachricht")
EndIf
Next i
MD_HandleArray(1)
EndProcedure
Procedure MD()
;
; Allgemeines; was soll getan werden
;
If PBWB_InitFramework("<user agent>", #PBWB_POSTHEADER_DEWIKI)
If PBWB_Logon("de.wikipedia.org", "Username", "Password")
; ----
MD_Send(0, "Wikipedia:StammtischXYZ/Einladungsliste", "{{ers:Wikipedia:StammtischXYZ/Einladung}}")
MD_Send(1, "Kategorie:Benutzer:aus XYZ", "{{ers:Wikipedia:StammtischXYZ/Einladung}}")
; ----
PBWB_Logoff("de.wikipedia.org")
EndIf
PBWB_FreeFramework()
EndIf
EndProcedure
MD()
</pre>All content in the above text box is licensed under the Creative Commons Attribution-ShareAlike license Version 4 and was originally sourced from https://de.wikipedia.org/w/index.php?oldid=121003976.
![]() ![]() This site is not affiliated with or endorsed in any way by the Wikimedia Foundation or any of its affiliates. In fact, we fucking despise them.
|