Nationalflaggen

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
Benutzeravatar
thowe
Beiträge: 230
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 109 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

Re: Nationalflaggen

#21

Beitrag von thowe »

Halle Heb,

stoppe mal die Quellensuche.
Die LinkLogik bei wkp (nehme an Abkürzung für wikipedia) habe ich verstanden und gesplittet
bis auf wenige Ausnahmen (glaublich 7 wie Volksrepubik China, Taiwan) ist der relveante Teil wie beispielsweise

Code: Alles auswählen

<a href="/wiki/Datei:Flag_of_Austria.svg" class="mw-file-description" title="Österreich"> 
immer - nach dem Spllitten das 12. Element im Array.

Jetzt muss ich nur noch "<a href="/wiki/Datei:Flag_of_Austria.svg"" herauskitzeln.
Versuchsweise/Testweise werden - im aktuellen Entwicklungsstatus die jeweiligen Länderspezfischen Flaggenzeilen der HTML-Tabelle pro Zeile in ein Arbeitsblatt eingelsen und dann eben gesplittet. Dies indem im ersten Schritt nach jedem schließenden ">" (chr(62)) eine Leerzeichen eingefügt wird und dann eben die VBA-Function Split verwendet wird.

Das Splitten ist meines Erachtens nicht nötig, da ich als einzigartigen Delimiter das Colon (";", also Doppelpunkt) identifizieren kann.

Dann muss ich eben nach Link nur das öffnende "<" suchen und nach Rechts das schließende /" " /" (Anführungszeichen) vor "class=...." finden. Dann abe ich den Kern der Url. Davor das übliche Gedöns https://....

Angedacht ist, dass beim Öffnen der Arbeitsmappe die Site: https://www.google.com/search?client=fi ... nalflaggen aufgerufen wird, nach dem Element

Code: Alles auswählen

<li id="footer-info-lastmod"> Diese Seite wurde zuletzt am 11. Juli 2024 um 02:18 Uhr bearbeitet.</li>


um das Aktualisierungsdatum abzugleichen (Da werde ich wahrscheinlich ein CPE (Custom Property Element verwenden). Nur bei Änderung das genannten Datums wird die Homepage wieder abgegrast. -> Ich beobacht nun mal wie oft das geändert wird.

Gleichzeitig muss beim erstmaligen Öffnen der Arbeitsmappe die Lizenzbedingungen der wikipedia zugestimmt werden. Das wird in CPEs Datum/Uhrzeit und die Zustimmung gespeichert.

In einem Arbeitsblatt (Versteckt) wird Zeilenweise eingetragen, das Land,die Url der Nationalflagge. Daraus gerneriert sich eine Listbox im Arbeitsblatt, oder doch nur eine UDF (mit der schon angedachten Syntax CreateCountryFlag (oder in deutsch ErstelleNationalflagge).

Dann wird das Shape autoatisch von Wikipedia herungerladen in einem - üblichen - Tmp Ordner zwischengespeichert und an die gewünschte Stelle eingefügt mit dem Namen beispielsweise: FlagAustria_fromwikipedia_byVBAsteleien.de.

Frage:
Ich habe statt das Speichern in einer .txt-DAtei versucht den Quellcode in ein Array zu laden. Nur da erhalte ich maximal ein 1/4 des Quellcodes. Gibt es da Limitierungen.?
xlKing
Beiträge: 52
Registriert: 30. Mai 2024, 19:42
Hat sich bedankt: 5 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: Nationalflaggen

#22

Beitrag von xlKing »

Wow, ihr wart inzwischen ja ganz schön fleißig mit einem völlig anderen Ansatz, den ich durchaus unterstütze, wo ich selbst aber nur begrenztes Wissen habe. Beim Webscraping, bin ich noch Anfänger. Habe natürlich auch schon erste Erfolge auf diversen Wegen erzielt, aber das Analysieren der Quellcodes von den Webseiten war mir bislang zu aufwendig, daher mache ich das eher selten. Auf jeden Fall würde ich hier nicht mit Textfunktionen rangehen wollen, sondern eher mit Eigenschaften wie GetelemtbyID usw. um das entsprechende zu bekommen.

Zu deiner Frage Thowe:
Es kommt darauf an, wie du das in das Array lädst. Aus eigener Erfahrung kann ich sagen. Beim Array selbst gibt es keine Limitierungen. Die einzige Limitierung ist dein Arbeitsspeicher. Aber kein Quelltext hat so viel Text, dass dieser erreicht wird. Ich habe schon Arrays mit 2 GB und mehr gefüllt.

Es gibt jedoch Funktionen ein Array zu füllen, die noch auf uralten Hintergrund-Codes aus dem letzten Jahrtausend basieren. Da ist natürlich dann irgendwann Schluss. Deshalb nochmal die Frage. Wie füllst du das Array?

Gruß Mr. K.
Benutzeravatar
thowe
Beiträge: 230
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 109 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

Re: Nationalflaggen

#23

Beitrag von thowe »

Hallo & guten Morgen xlKing

thowe... :lol:

Danke für deine Antwort.

Eigentlich bist du für mich der Motivator gewesen, weil deine ersten beiden Ansätze haben mich so richtig staunen lassen. Die mit Zellhintergrund (das möchte ich weiter verfolgen) und das mit der Canada-flag.

Zum Array:
Das hatte ich mal quick & dirty einfach so gemacht.

Code: Alles auswählen

Sub GetFlagsToArray()
'setzt die Verweise 'Microsoft HTML Object Library' & 'Microsoft XML, v6.0' voraus
    Dim xmlhttp As New MSXML2.XMLHTTP60
    Dim arrSoure As Variant
    'POST ist stabiler als GET, schneller und ignoriert den Cache, ist also tatsächlich aktuell
    xmlhttp.Open "POST", "https://de.wikipedia.org/wiki/Liste_der_Nationalflaggen", False
    xmlhttp.send
    
    arrSource = xmlhttp.responseText
End Sub
Hier erhalte ich ca. 440 Zeilen. Bei der Variante mit .txt-File sind es insgesamt knapp über 2200 Zeilen (wenn ich mich richtig erinntere)

lg thowe
Benutzeravatar
d'r Bastler
Beiträge: 832
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 224 Mal
Danksagung erhalten: 119 Mal

Re: Nationalflaggen

#24

Beitrag von d'r Bastler »

Moin Ihr zwei,

Alternative zum Array des ungefilterten HTML-Blocks ist doch die externe .txt-Datei. Die dann gefiltert in ein Array zu schreiben dürfte vermutlich auch mit Steinzeit-Tools möglich sein. Dass XL nicht immer allen xmlhttp.responseText einfängt, habe ich schon beim Versuch den HTML-Code in ein Sheet zu schreiben gemerkt.

Aber xlKing: Kannst du noch einen Hinweis geben, was etwas neuzeitlicher ist? Ich hätte auch thowes Methode gewählt.

lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 230
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 109 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

Re: Nationalflaggen

#25

Beitrag von thowe »

Hallöchen Heb!

Ha!
jetzt hab ich dich...

In einem anderen Projekt wolltest du nicht - per se - das Downloaden in eine - lokale - .txt-Datei
Daher suche/n ich/wir 1en Weg das zu umschiffen. Die Daten zu grabben/crawlen (ws auch immer) und nix am comi des - ahnungslosen - Benutzers anstellen...

lg thowe
Benutzeravatar
d'r Bastler
Beiträge: 832
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 224 Mal
Danksagung erhalten: 119 Mal

Re: Nationalflaggen

#26

Beitrag von d'r Bastler »

Weißt Du was, mein fröhlicher Steirer?

:lol: Erst meinen Code als quick & dirty titulieren und dann noch von wegen "Jetzt hast Du mich!" :lol: Komm Du mir nach Mannheim! :mrgreen:

Ich hatte mich seinerzeit gegen .txt ausgesprochen (und tue das auch heute noch) , wenn sie dauerhaft neben einer XL-Datei bestehen und möglichweise auch noch Daten enthalten, die man vergleichbar einer .ini für den laufenden Betrieb benötigt. Dafür sind sie zu verletzlich für "mutige" User.

Mein Vorschlag hier bezieht sich aber auf einen temporären Download, der nach dem Filtern nicht mehr gebraucht wird. (Ich hätte natürlich noch eine Zeile die .txt dann zu löschen in Petto) Denn dann sind die wichtigen Daten entweder in einer Tabelle, einem Array oder einer Collection. Husch, husch, wägg worn's

Ich hole mir dann mal ein Vanille-Eis mit Kürbis-Zutaten :P

P.S. Ich hatte ganz vergessen, mich für den Tipp mit dem Splitten oben zu bedanken. Das eröffnet tatsächliche neue wkp-Möglichkeiten!

lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 230
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 109 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

Re: Nationalflaggen - Aufkärung tut gut

#27

Beitrag von thowe »

Hallo Heb,

!!!! ACHTUNG !!!
ich kenne mich im Quadrat aus..immerhin einermeiner Sohnemanns hat dort studiert -> und das als Schnitzelländer im Kürbiskerngebiet!
-> Hüte dich, Im Kürbiskernschleudern bin vulkanisch heiß...!

...auch im fortgeschrittenen Alter tut Aufklärung gut.
Dein Motiv dich gegen.txt (für dauerhaften Mißbrauch als .ini) zu entscheiden -> ist nachvollziehbar! *DANKE!*
in meinem Programmiersprech:

function ExportEnvAsIniInTxtFile($params, $instructor) {
getEnv -> fault()
$params -> getEnv = true [
§instructor => want() -> getNULL //seems to be FALSE :-;
$instructor = true ? false : set NULL
//every result is Hebs Dogma
// never use wrongly txt-file!
// here can`t be some stuff -> look hebs stuff!
]

return self::instructor
}

ExportEnvAsIniInTxtFil (want(), NULL)


Nachschub für Kürbisgedöns nötig? -> gerne doch!!! -> 1fach anfordern....

Jetzt dann das sehr einfache splitten von wkp hier:

Code: Alles auswählen

Sub TestInsertSpacesAndSplit()
    Dim intLastRow As Integer
    Dim rng As Range
    Dim cell As Range
    Dim strTemp As String
    Dim aryTemp
    Dim i 'Iterator Array
    Dim j 'Iterator rows

  With ActiveSheet
    j = 0
    intLastRow = .UsedRange.Rows.Count
    Set rng = .Range(Cells(1, 1), Cells(intLastRow, 1))

    For Each cell In rng
        j = j + 1
        strTemp = cell.Value
        aryTemp = Split(strTemp, ">")
        strTemp = ""
            strTemp = aryTemp(i) & "> "
            cell.Offset(0, i + 1).Value = strTemp
        Next i
    Next cell
    
  End With
End Sub
Ich hoffe ich habe das richtige Modul Segement erwischt.

lg
Folgende Benutzer bedankten sich beim Autor thowe für den Beitrag:
d'r Bastler
xlKing
Beiträge: 52
Registriert: 30. Mai 2024, 19:42
Hat sich bedankt: 5 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: Nationalflaggen

#28

Beitrag von xlKing »

Wie gesagt, beim Webscraping kenn ich mich noch nicht so gut aus. Ist also auch für mich relativ neu. Soweit ich aber sehen kann, nutzt ihr bereits die modernste Weise auf die Daten zuzugreifen. Allerdings lege ich den Responsetext noch in ein HTML-Document ab um mit GetelementsbyID (leider gibts hier keine ID, deshalb mit getelementsbyTagname) darauf zuzugreifen. Immerhin ist es mir schon gelungen alle gezeigten Länder und deren SVG-Link in einer Excel-Tabelle zu listen. Hier der Code:

Code: Alles auswählen

Sub GetFlagsToHtml()
'setzt die Verweise 'Microsoft HTML Object Library' & 'Microsoft XML, v6.0' sowie Microsoft Internet Controls voraus
    Dim xmlhttp As New MSXML2.XMLHTTP60
    Dim HTMLDoc As New MSHTML.HTMLDocument
    Dim tbl As MSHTML.IHTMLElement
    Dim a As MSHTML.IHTMLElement
    Dim a2 As MSHTML.HTMLAnchorElement
    Dim nm As String
    Dim r As Long
    'Dim arrSoure As Variant
    'POST ist stabiler als GET, schneller und ignoriert den Cache, ist also tatsächlich aktuell
    xmlhttp.Open "POST", "https://de.wikipedia.org/wiki/Liste_der_Nationalflaggen", False
    xmlhttp.send
    
    If xmlhttp.Status <> 200 Then
      MsgBox "Problem"
      Exit Sub
    End If
    
    
    HTMLDoc.body.innerHTML = xmlhttp.responseText
    'arrSource = xmlhttp.responseText
    
    On Error GoTo Fehler
    For i = 1 To 23
      Set tbl = HTMLDoc.getElementsByTagName("table")(i)
      flr = False
      For k = 0 To 100
        Set cl = tbl.getElementsByTagName("td")(k)
        Set a = cl.getElementsByTagName("a")(0)
        If flr Then Exit For
        nm = a.innerHTML
        r = r + 1
        Cells(r, 1) = nm
        Set a2 = cl.getElementsByTagName("a")(2)
        If Right(a2.href, 4) <> ".svg" Then Set a2 = cl.getElementsByTagName("a")(3)
        Cells(r, 2) = a2.href
      Next k
    Next i
    
    
Fehler:
  flr = True
  Resume Next
End Sub
Ich weiß aber noch nicht, wie ich jetzt an die SVG-Daten rankomme.

Gruß Mr. K.
Benutzeravatar
thowe
Beiträge: 230
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 109 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

Re: Nationalflaggen

#29

Beitrag von thowe »

Hallo xlKing,

danke mal.
Den Code für das an das Image rankommen habe ich gebastelt.
Muss ihn nur noch testen. Mache ich über das Wochenende

lg
xlKing
Beiträge: 52
Registriert: 30. Mai 2024, 19:42
Hat sich bedankt: 5 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: Nationalflaggen

#30

Beitrag von xlKing »

So, ich für meinen Teil habe das Projekt jetzt für mich erfolgreich beendet. Ich habe ein Userform gebastelt, mit einer Combobox und einem Button "CreateFlag". In die Combobox werden die Länder geladen und erst beim Click auf den Button wird über die Unterseite nach der SVG-Datei gesucht und die gewünschte SVG-Flagge als Online-Bild importiert. Das ganze kommt ohne Erstellen einer Datei auf dem User-PC aus.

Da es aber thowes Idee war, und er damit Geld verdienen will, werde ich den finalen Code nur mit seiner Erlaubnis hier posten.

Auf diese Weise vermeidet man eine Massenanfrage von Unterseiten auf dem Wiki-Server, die u.U. zum Serverabsturz führen könnten. Denn wenn das passiert, dann wird bestenfalls die IP gesperrt und man kann nicht mehr auf Wiki zugreifen. Von rechtlichen Schritten ganz zu schweigen.

Apropos Rechte. Wie ist das mit dem Urheberecht? Irgendwer hat sich ja mal die Mühe gemacht die SVG-Daten zu erstellen. Schon deshalb würde ich hier kein Geld verlangen, da das Ergebnis auf der Arbeit unbekannter Dritter aufbaut. Dennoch finde ich den SVG-Import als bestmögliche Lösung für das Problem.

Gruß Mr. K.
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste