Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Frage zu Suchprogramm

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
klendathu



Anmeldungsdatum: 18.01.2019
Beiträge: 21
Wohnort: Dortmund

BeitragVerfasst am: 13.09.2019, 14:23    Titel: Frage zu Suchprogramm Antworten mit Zitat

Hallo,

ich bin leider seit jahren raus im programmieren mit basic und hätte jetzt einen konkreten anlass, für das ich es eigentlich benötigen würde. Vielleicht kann mir hier jemand helfen?

ich wollte ein programm schreiben, bestimmte informationen im internet zu suchen. Ich möchte mir damit die recherche bestimmter gewichtsangaben für eine liste von tiernamen verkürzen.

das programm sollte zb. google verwenden um nach diesem gewicht zu suchen und danach den gefundenen gewichtswert entweder
a) als txt abspeichern, mit einem namen der dem tier entspricht, zu dem der wert gefunden wurde.
oder
b) am besten den gefunden wert hinter den namen des tieres selbstständig in die liste einfügen...

ist so etwas machbar?

Lg!

Klen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4264
Wohnort: ~/

BeitragVerfasst am: 13.09.2019, 19:21    Titel: Antworten mit Zitat

Machbar ist es schon; die Hauptschwierigkeit besteht darin, die Informationen sinnvoll herauszufiltern.

Zum Abrufen von Seiten im Internet: als einfache Lösung https://www.freebasic-portal.de/code-beispiele/internet-netzwerke/websites-selbst-verarbeiten-105.html. Der Rückgabewert enthält dann den kompletten HTML-Text der Seite (durchaus möglich, dass es Probleme mit zu großen Seiten gibt). Verarbeiten kann man den dann über die üblichen Stringfunktionen.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 943
Wohnort: Ruhrpott

BeitragVerfasst am: 14.09.2019, 14:36    Titel: Antworten mit Zitat

nemored hat Folgendes geschrieben:
Zum Abrufen von Seiten im Internet: als einfache Lösung https://www.freebasic-portal.de/code-beispiele/internet-netzwerke/websites-selbst-verarbeiten-105.html. Der Rückgabewert enthält dann den kompletten HTML-Text der Seite.
Die Sache hat leider einen Haken: httpget unterstützt kein SSL und kann demzufolge auch keine verschlüsselten Seiten (https) aufrufen. traurig

Aber glücklicherweise gibt es noch libcurl. Lade die für dich passende Version der libcurl.dll herunter und kopiere sie in den Ordner, in dem dein Programm steht.

Da die Handhabung von libcurl nicht ganz so einfach ist, habe ich dir aus meinem Fundus mal ein kleines Demoprogramm zusammengestellt, das die Startseite von Google herunterlädt und in einer Datei speichert:
Code:
#Include Once "curl.bi"
#Include "vbcompat.bi"

Type tCurlInfo
   curl As CURL Ptr
   ff As Integer
   geslen As Double
   dllen As Double
   timeout As Double = 3.0
   verlauf As boolean = FALSE
   inhalt As String
End Type

Declare Function herunterladen_curl(titel As String, tout As Double = 10.0) As String
Declare Function write_callback_curl Cdecl (buffer As Byte Ptr, size As Long, nitems As Long, info As tCurlInfo Ptr) As Integer

Function herunterladen_curl(titel As String, tout As Double = 10.0) As String
   Dim As tCurlInfo curlinfo
   Dim As String dlurl, tmp
   Dim As Double timeout
      
   curlinfo.curl = curl_easy_init()
   If curlinfo.curl = 0 Then
      Print "FEHLER"
      Return ""
   End If

   '' set url and callback
   curl_easy_setopt(curlinfo.curl, CURLOPT_URL, titel)
   curl_easy_setopt(curlinfo.curl, CURLOPT_WRITEDATA, @curlinfo)
   curl_easy_setopt(curlinfo.curl, CURLOPT_WRITEFUNCTION, @write_callback_curl)
   
   curl_easy_setopt(curlinfo.curl, CURLOPT_SSL_VERIFYPEER, 0)
   
   curlinfo.timeout = tout
         
   curl_easy_perform(curlinfo.curl) 'execute..
   curl_easy_cleanup(curlinfo.curl) 'shutdown
   
   Close curlinfo.ff
   
   Return curlinfo.inhalt
End Function

Function write_callback_curl Cdecl (buffer As Byte Ptr, size As Long, nitems As Long, info As tCurlInfo Ptr) As Integer
   Dim As Integer x, bytes = size * nitems
   Dim As Double tot_len, dl_len, timeout = Timer + info->timeout
         
   curl_easy_getinfo(info->curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, @info->geslen )
   curl_easy_getinfo(info->curl, CURLINFO_SIZE_DOWNLOAD, @info->dllen )
   
   If info->ff Then
      If info->geslen = -1 Then
         Print Format(info->dllen/1024/1024,"#.##");" MB (ESC to terminate)"
      Else
         Print Int(100 * info->dllen / info->geslen);"% of ";Format(info->geslen/1024/1024,"#.##");" MB (ESC to terminate)"
      EndIf
      Locate CsrLin - 1,1,0
      If info->geslen = info->dllen Then
         Print
      EndIf
      Put #info->ff, ,*buffer,bytes 'write downloaded bytes to file
   Else      
      For x = 0 To bytes - 1
         info->inhalt += Chr(buffer[x])
      Next   
   EndIf
   
   If (InKey = Chr(27)) Or (Timer > timeout) Then
      Print
      Return 0
   EndIf
   
   Return bytes
End Function

Dim As String inhalt

inhalt = herunterladen_curl("https://www.google.de")

Print Left(inhalt, 1000)

Open "C:\downloadtest.htm" For Output As #1
Print #1, inhalt;
Close

Sleep
Ein Doppelklick auf die Datei zeigt die Google - Startseite im Browser an.

Allerdings auch hier kein Paradies ohne verbotene Frucht: curl kann keine URLs mit Umlauten verarbeiten (wenn jemand wissen sollte, wie das geht, bitte dringend bei mir melden!!!).

Das Herausfiltern von Informationen aus HTML - Text ist dann noch mal eine ganz andere Geschichte...

Aber zumindest liesse sich so schon mal das Aufrufen aller Hyperlinks und das Durchsuchen der Seiten nach relevanten Begriffen automatisieren.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!


Zuletzt bearbeitet von grindstone am 14.09.2019, 15:51, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
klendathu



Anmeldungsdatum: 18.01.2019
Beiträge: 21
Wohnort: Dortmund

BeitragVerfasst am: 14.09.2019, 15:44    Titel: Antworten mit Zitat

Hallo Grindstone,

das sieht vielversprechend aus, was du da geschickt hast und könnte mir wirklich weiter helfen lächeln Vielen lieben Dank schon mal!

Wäre es möglich, das Demoprogramm so zu modifizieren, dass es aus einer Textdatei, quasi die Liste mit den Suchbegriffen, es sind Namen von Krustentieren, den Namen als Variable herauspickt, nach der das Programm dann zb die ersten 5 Seiten von Google durchsucht und dann die Ergebnisse, zb auch als Textdatei speichert?

Das Schema der Ergebnissuche habe ich mir relativ einfach vorgestellt.
Es wäre vorstellbar, dass nur die Seite mit den Treffern aus Google gespeichert wird. Zb als TxT. Dort wäre der gesuchte Wert, den ich benötige, nach einem simplen Schema zu finden: Der Wert muss in der Nähe von
"Ammonia production" sein,
eine Zahl sein
im besten Fall wird die Zahl gefolgt von einem "g" oder von "grams"

Der restliche Text, ausser das Ergebnis, würden aus der Textdatei gelöscht.

Die Textdatei könnte dann gespeichert werden mit dem Namen des Tieres, das gesucht wurde.

Der Name des Tieres besteht immer aus zwei Wörtern
Zb

Carcinus maenas
cancer magister
humarus gammarus
scylla serrata


Könntest du mir hier vielleicht weiter helfen?

Lg Klen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 943
Wohnort: Ruhrpott

BeitragVerfasst am: 14.09.2019, 18:07    Titel: Antworten mit Zitat

klendathu hat Folgendes geschrieben:
Könntest du mir hier vielleicht weiter helfen?
Gerne, soweit ich kann. Allerdings ist -wie gesagt- das Herausziehen von Informationen aus einem HTML - Text eine besondere Herausforderung.

Immerhin habe ich inzwischen herausgefunden, wie man per libcurl Suchanfragen an Google schickt (ist für mich auch neu lächeln ): Wenn du die URL
    "https://www.google.de"
im Beispielprogramm durch
    "https://www.google.be/search?q=Carcinus%20maenas&num=5"
ersetzt, bekommst du -wie gewünscht- die ersten 5 Treffer zur Gemeinen Strandkrabbe zurückgeschickt. Und wenn du das ganze nominell als Textdatei haben möchtest, ändere einfach die Endung ".htm" in ".txt" (am Dateiinhalt ändert sich dadurch nichts).

Aber immer eins nach dem anderen. Zuerst einmal mußt du libcurl zum Laufen bringen. Sag bescheid, wenn du soweit bist.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4264
Wohnort: ~/

BeitragVerfasst am: 14.09.2019, 18:35    Titel: Antworten mit Zitat

@grindstone: Ich hatte mal nur ein bisschen mit der WinAPI, URLDownloadToFile experimentiert, vielleicht kommt das mit Umlauten besser zurecht? (und für Linux nehme ich dann stattdessen wget)
Ich habe aber denn (Datei-)Downloadgedanken bisher nicht weiter verfolgt. Ging mir um eine eingebaute Update-Funktion, aber im Moment habe ich anderes zu tun. happy

@klendathu
Zitat:
Es wäre vorstellbar, dass nur die Seite mit den Treffern aus Google gespeichert wird. Zb als TxT. Dort wäre der gesuchte Wert, den ich benötige, nach einem simplen Schema zu finden: Der Wert muss in der Nähe von
"Ammonia production" sein,
eine Zahl sein
im besten Fall wird die Zahl gefolgt von einem "g" oder von "grams"

Wenn sich Google bei den Ergebnissen an ein spezielles Muster halten würde (was als Suchmaschine aber nicht unbedingt Sinn macht), wäre es relativ leicht zu parsen. Ich habe mal als Beispiel https://www.google.com/search?q=weight+of+cancer+magister ausprobiert. Bei der ersten Angabe von " g " steht bei mir "1.88 to 316 g" (Suchergebnisse können sich lokal unterscheiden, und ich habe jetzt nicht überpüft, ob das Gewicht zum richtigen Tier gehört; es ist aber die einzige auffindbare Grammangabe auf dieser ersten Ergebnisseite). Wenn ich https://www.google.com/search?q=gewicht+cancer+magister probiere, erhalte ich als einzige verwertbare Gewichtsangabe "6kg"), die aber zu Cancer pagurus zu gehören scheint. Kurz gesagt: Wenn ich was mit dem Ergebnis anfangen könnte, würde ich gern weiterhelfen; ich halte es aber für nicht verwertbar. Vielleicht stimmt eine der beiden Gewichtsangaben, aber sicher kann man da ohne massiven Einsatz künstlicher Intelligenz nicht sein.
(Einfach nur nach einer Zahl in der Nähe des Namens zu suchen, halte ich übrigens nicht für sinnvoll - vielleicht handelt es sich dabei auch um die Größe, die Anzahl der Beine, oder irgendwer wollte bloß mal mitteilen, wie viele dieser Tiere er heute schon gesehen hat. grinsen )

Für besser aufgearbeitete Suchergebnisse würde ich sehr gern https://www.wolframalpha.com/ empfehlen, was mir aber leider für die ersten beiden Tests keine Gewichtsangaben liefern konnte. Vielleicht gibt es eine spezielle Plattform, auf der man eher fündig wird?
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 943
Wohnort: Ruhrpott

BeitragVerfasst am: 14.09.2019, 19:55    Titel: Antworten mit Zitat

@nemored:

Ich muß mich korrigieren: Wie ich inzwischen festgestellt habe, hat libcurl hat keine Probleme mit (URL-codierten) Umlauten. Lediglich die URL
    "https://de.wikipedia.org/wiki/Spezial:Zuf%C3%A4llige_Seite"
funktioniert nicht - warum auch immer. verwundert

Was das Problem der Websuche betrifft, dürfte wohl die halbautomatische Vorgehensweise am zielführendsten sein: Das Programm sucht alle möglicherweise relevanten Seiten heraus, die dann von klendathu gesichtet werden.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Toa-Nuva



Anmeldungsdatum: 14.04.2006
Beiträge: 202
Wohnort: München

BeitragVerfasst am: 16.09.2019, 18:15    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
Ich muß mich korrigieren: Wie ich inzwischen festgestellt habe, hat libcurl hat keine Probleme mit (URL-codierten) Umlauten. Lediglich die URL
    "https://de.wikipedia.org/wiki/Spezial:Zuf%C3%A4llige_Seite"
funktioniert nicht - warum auch immer. verwundert

Wahrscheinlich ist das Problem dann die Weiterleitung (per HTTP Status Code 302) und nicht der Umlaut. So ist das jedenfalls in der Kommandozeile - curl folgt der Weiterleitung nur, wenn man das mit dem zusätzlichen Argument -L explizit fordert.

libcurl hab ich noch nie direkt benutzt, aber das hier müsste die entsprechende Option sein: https://curl.haxx.se/libcurl/c/CURLOPT_FOLLOWLOCATION.html
_________________
704 Signature not found
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 943
Wohnort: Ruhrpott

BeitragVerfasst am: 17.09.2019, 15:47    Titel: Antworten mit Zitat

@ Toa-Nuva:

Vielen herzlichen Dank, es funktioniert! happy happy happy

Diese Seite benutze ich nämlich gerne, wenn ich für Testzwecke große Mengen von beliebigem Text benötige (dafür spende ich auch jedes Jahr an Wikipedia zwinkern ). Seit Wikipedia auf https umgestellt hat, geht das mit PMedias httpget nicht mehr, und ich habe ganz schön auf dem Schlauch gestanden.

Für alle, die es interessiert: In FB lautet die zusätzliche Option:
Code:
   curl_easy_setopt(<curlHandle>, CURLOPT_FOLLOWLOCATION, 1)


Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz