Difference between revisions 121001738 and 121003976 on dewiki

Täst

äöü

äöü[[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>