Hur bygger man en sökrobot som automatiskt sparar hem inehåll från sidor i en mySQL databas efter vissa kriterier? Alexander, det är väl precis rätt forum... hur lokaliserar man information... ;-) Jag håller på med ett spindelprogram, jag använder Powerbasic. Nedan har du koden för den första utgåvan av programmet, senare utgåvor är mer specialiserade mot mitt primära syfte, att få tag på ny svenska ord.Hur bygger man en sökrobot?
Vilket språk skriver man den i, någon som kan hänvisa till artikel / guide? Sv: Hur bygger man en sökrobot?
Detta är inte en fråga för Lokaliserings-forumen. Ställ frågan i ett mer lämpligt forum, förslags vis ett forum (givetvis här på pellesoft :) som riktar sig till det programmeringsspråk du använder dig av.Sv:Hur bygger man en sökrobot?
En liten beskrivning av vad vi menar med lokalisering kanske hade varit på plats. Alla pratar ju inte samma "fikon" språk...Sv: Hur bygger man en sökrobot?
' PROGRAM-NAMN SPINDEL1.BAS
' FÖRFATTARE FIM WÄSTBERG.
' DATUM 2005-02-14 18:04 I JÄRFÄLLA.
'
' SPINDEL. HÄMTNING AV NÄSTAN ALLA SIDOR INOM EN WEBSAJT
'
' ÄNDRINGS- OCH RÄTTNINGS-JOURNAL
' Vers Tidpunkt Ändringsbeskrivning
' ------- ---------------- --------------------------------
' 2005-02-14 18:04 Nytt program
' Nationella gemena = †† „„ ”” å ä ö
' Nationella versaler = ŽŽ ™™ Å Ä Ö
' Fullständig URL ska anges som parameter
' KOMPILATORDIREKTIV
' ==================
'
%port = 80
#COMPILER PBCC
#DIM ALL
' FUNKTIONS-DEKLARATIONER
' ========================
'
DECLARE FUNCTION SKRIV_TAL(TAL AS LONG, RADNR AS LONG, KOLNR AS LONG) AS LONG
DECLARE FUNCTION GetCurrentProcessId LIB "KERNEL32.DLL" ALIAS "GetCurrentProcessId" () AS LONG
'Option Explicit
FUNCTION PBMAIN() AS LONG
WEB_DATA:
DIM buffer AS STRING
DIM FIL_DATA AS STRING
DIM FIL_HUVUD AS STRING
DIM FIL_DATA_REST AS STRING
DIM SLASK AS STRING
URL_DATA:
DIM URL_NORMALISERAD_UVA AS STRING
DIM FIL_LANGD AS LONG
DIM URL_SAJT_AKTUELL AS STRING
DIM URL_SAJT AS STRING
DIM URL_FIL AS STRING
DIM URL AS STRING
UT_DATA:
DIM UTFIL_NAMN AS STRING
DIM UTFIL_NAMN_FORLED AS STRING
DIM UTFIL_NAMN_PDF AS STRING
DIM TIDEN AS STRING
DIM DAGENS_DATUM AS STRING
DIM BOKSTAV AS STRING
DIM FIL_SUFFIX AS STRING
DIM STATUSFIL AS STRING
DATABAS_DATA:
DIM POST_UVA AS STRING
DIM DATABASNAMN AS STRING
DIM FILSLUT AS LONG
DIM DATABAS_HANDTAG AS LONG
DIM RETURKOD AS LONG
DIM TYST_LAGE AS LONG
DIVERSE:
DIM PID AS LONG
DIM PID_TEXT AS STRING
DIM BILD AS LONG
DIM START_TID AS LONG
DIM LOGGFIL AS STRING
DIM PA_TID AS LONG
DIM PA_TID_MIN AS LONG
DIM HASTIGHET AS LONG
DIM KOMRAD AS STRING
DIM BINAR_DATA AS STRING
DIM SVAR AS LONG
DIM AVBRYT AS LONG
ANTALSRAKNARE:
DIM ANTAL_HAMTADE_FILER AS LONG
DIM ANTAL_FEL AS LONG
DIM ANTAL_HAMTADE_BLOCK AS LONG
DIM R AS LONG
DIM ANTAL_HAMTADE_BYTE AS LONG
URL_TABELL:
DIM URL_FIL_TAB (1:1000000) AS STRING
DIM ANTAL_URL_FIL_TAB AS LONG
DIM NR_TAB AS LONG
FIL_NUMMER:
DIM FILNR_LOGGFIL AS LONG
DIM FILNR_SAJTFIL AS LONG
DIM FILNR_TCP AS LONG
DIM FILNR_UTFIL AS LONG
DIM FILNR_UTFIL_PDF AS LONG
PARAMETERHAMTNING:
'=================
'
HAMTA_PARAMETRAR:
URL_SAJT_AKTUELL = LCASE$(TRIM$(COMMAND$))
IF LEN (URL_SAJT_AKTUELL) = 0 THEN
PRINT "URL som parameter saknas"
GOTO PROGRAMSLUT
END IF
STARTSEKVENS:
'============
'
STARTVARDEN:
ON ERROR GOTO FELBEHANDLING
NR_TAB = 0
UTFIL_NAMN = ""
URL_FIL = ""
START_TID = TIMER
BYGG_BINAR_DATA:
BINAR_DATA = ""
FOR R = 0 TO 7
BINAR_DATA = BINAR_DATA + CHR$(R)
NEXT R
HAMTA_PID:
PID = GetCurrentProcessId
PID_TEXT = MID$(STR$(PID), 2)
STARTA_UTFILER:
LOGGFIL = URL_SAJT_AKTUELL + ".logg"
FILNR_LOGGFIL = FREEFILE
OPEN LOGGFIL FOR OUTPUT AS #FILNR_LOGGFIL
UTFIL_NAMN = URL_SAJT_AKTUELL + ".htm
FILNR_UTFIL = FREEFILE
OPEN UTFIL_NAMN FOR OUTPUT AS #FILNR_UTFIL
CLOSE #FILNR_UTFIL
BILDSTART:
IF TYST_LAGE THEN GOTO BILDSTART_END
COLOR 14,1
CLS
LOCATE 1, 1
PRINT "URL-sajt =" ' 1
PRINT "URL-fil =" ' 2
PRINT "PID =" ' 3
PRINT "Hämtade block =" ' 4
PRINT "Antal h„mtade =" ' 5
PRINT "Antal filer =" ' 6
PRINT "Kbytes/sek =" ' 7
PRINT "Antal fel =" ' 8
PRINT "H„mtade kbytes =" ' 9
PRINT "Totaltid min =" ' 10
LOCATE 1, 17
PRINT URL_SAJT_AKTUELL
LOCATE 3, 17
PRINT PID
BILDSTART_END:
HAMTNING_AV_WEBSIDA:
'=====================
'
HAMTNING_AV_WEBSIDA_START:
ON ERROR GOTO HAMTNING_AV_WEBSIDA_FEL
IF INKEY$ = CHR$(27) THEN
AVBRYT = 1
GOTO SLUTSEKVENS
END IF
LOCATE 2,17: PRINT SPACE$(50)
LOCATE 2,17: PRINT MID$(URL_FIL, 1, 50)
LOCATE 4,17: PRINT " 0 "
ANTAL_HAMTADE_BLOCK = 0
LOGGNING:
PRINT #FILNR_LOGGFIL, URL_FIL
ANSLUTNING_TILL_WEBSAJTEN:
FILNR_TCP = FREEFILE
TCP OPEN PORT %port AT URL_SAJT_AKTUELL AS #FILNR_TCP TIMEOUT 5000
IF ERR THEN
LOCATE 12,1
PRINT "Den sajten finns inte"
GOTO SLUTSEKVENS
END IF
BEGAR_HAMTNING_AV_INFILEN:
TCP PRINT #FILNR_TCP, "GET " + "/" + URL_FIL + " HTTP/1.0"
TCP PRINT #FILNR_TCP, "Accept: */*"
TCP PRINT #FILNR_TCP, "Accept-Language: en-us"
TCP PRINT #FILNR_TCP, "Host: " + URL_SAJT_AKTUELL
TCP PRINT #FILNR_TCP, "Pragma: no-cache"
'' TCP PRINT #FILNR_TCP, "Referer: http://www.google.com"
' TCP PRINT #FILNR_TCP, "User-Agent: webget 1.3 (www.powerbasic.com)"
TCP PRINT #FILNR_TCP, "User-Agent: Spindel1 (www.ordkors.se)"
TCP PRINT #FILNR_TCP, ""
HAMTNING_AV_INFILEN_START:
FIL_DATA = ""
HAMTNING_AV_INFILEN_NASTA_4096_BYTES:
TCP RECV #FILNR_TCP, 4096, BUFFER
FIL_DATA = FIL_DATA + BUFFER
IF LEN(BUFFER) > 0 THEN
INCR ANTAL_HAMTADE_BLOCK
LOCATE 4, 17
PRINT ANTAL_HAMTADE_BLOCK
GOTO HAMTNING_AV_INFILEN_NASTA_4096_BYTES
END IF
TCP CLOSE #FILNR_TCP
INCR ANTAL_HAMTADE_FILER
SVAR = SKRIV_TAL(ANTAL_HAMTADE_FILER, 5, 17)
ANTAL_HAMTADE_BYTE = ANTAL_HAMTADE_BYTE + LEN(FIL_DATA)
PA_TID = TIMER - START_TID
IF PA_TID < 0 THEN PA_TID = PA_TID + 86400
HASTIGHET = ANTAL_HAMTADE_BYTE / PA_TID / 1000
PA_TID_MIN = PA_TID / 60
SVAR = SKRIV_TAL(HASTIGHET, 7, 17)
SVAR = SKRIV_TAL (PA_TID_MIN, 10, 17)
SVAR = SKRIV_TAL(ANTAL_HAMTADE_BYTE / 1000, 9, 17)
SKILJ_PA_HUVUD_OCH_KROPP:
FIL_HUVUD = EXTRACT$(FIL_DATA, CHR$(13) + CHR$(10) + CHR$(13) + CHR$(10))
FIL_DATA = TRIM$(REMAIN$(FIL_DATA, CHR$(13) + CHR$(10) + CHR$(13) + CHR$(10)))
IF LEN(FIL_DATA) > 0 THEN GOTO HAMTNING_AV_WEBSIDA_END
IF INSTR(LCASE$(FIL_HUVUD), "location:") > 0 THEN
FIL_DATA = LCASE$(FIL_HUVUD)
REPLACE "Location:" WITH " href=" IN FIL_DATA
END IF
GOTO HAMTNING_AV_WEBSIDA_END
HAMTNING_AV_WEBSIDA_FEL:
ON ERROR GOTO FELBEHANDLING
PRINT #FILNR_LOGGFIL, "HAMTNING_AV_WEBSIDA FELNR=";ERR
ERRCLEAR
INCR ANTAL_FEL
SVAR = SKRIV_TAL(ANTAL_FEL, 8, 17)
TCP CLOSE #FILNR_TCP
HAMTNING_AV_WEBSIDA_END:
LAGRING_AV_HAMTAD_FIL:
'=====================
'
LAGRING_AV_FILEN_START:
ON ERROR GOTO LAGRING_AV_HAMTAD_FIL_FEL
LOCATE 4, 17
PRINT "L ";
URL_FIL = TRIM$(URL_FIL)
' IF LEN(URL_FIL) = 0 THEN GOTO LAGRING_AV_HAMTAD_FIL_END
' IF LEN(URL_FIL) = 0 THEN URL_FIL = URL_SAJT_AKTUELL
FASTSTALL_DOKUMENTTYP:
IF INSTR(UCASE$(URL_FIL), ".PDF") > 0 THEN GOTO LAGRA_PDF_FIL
IF UCASE$(MID$(FIL_DATA, 1, 5)) = "%PDF-" THEN GOTO LAGRA_PDF_FIL
IF INSTR(FIL_DATA, ANY BINAR_DATA) > 0 THEN GOTO LAGRING_AV_HAMTAD_FIL_END
GOTO LAGRA_TEXT_FIL
LAGRA_PDF_FIL:
TIDEN = TIME$
UTFIL_NAMN_PDF = URL_SAJT_AKTUELL + "-" + MID$(TIDEN, 1, 2) + "." + MID$(TIDEN, 4, 2) + "." + MID$(TIDEN, 7, 2) + ".PDF"
FILNR_UTFIL_PDF = FREEFILE
OPEN UTFIL_NAMN_PDF FOR OUTPUT AS #FILNR_UTFIL_PDF
PRINT #FILNR_UTFIL_PDF, FIL_DATA
CLOSE #FILNR_UTFIL_PDF
GOTO LAGRING_AV_HAMTAD_FIL_END
LAGRA_PDF_FIL_END:
LAGRA_TEXT_FIL:
OPEN UTFIL_NAMN FOR APPEND AS #FILNR_UTFIL
PRINT #FILNR_UTFIL, FIL_DATA
CLOSE #FILNR_UTFIL
GOTO LAGRING_AV_HAMTAD_FIL_END
LAGRING_AV_HAMTAD_FIL_FEL:
ON ERROR GOTO FELBEHANDLING
PRINT #FILNR_LOGGFIL, "LAGRING_AV_HAMTAD_FIL FELNR=";ERR
ERRCLEAR
' CLOSE
GOTO LAGRING_AV_HAMTAD_FIL_END
LAGRING_AV_HAMTAD_FIL_END:
UTTAGNING_AV_HREF_I_FILEN:
'=========================
'
ON ERROR GOTO FELBEHANDLING
LOCATE 4, 17
PRINT "H ";
JUSTERINGAR_AV_FIL_DATA:
REPLACE "'" WITH CHR$(34) IN FIL_DATA
REPLACE "==" WITH "=" IN FIL_DATA
REPLACE "../" WITH "" IN FIL_DATA
REPLACE "HREF=" WITH "href=" IN FIL_DATA
REPLACE "Href=" WITH "href=" IN FIL_DATA
FIL_DATA = TRIM$(FIL_DATA)
SOKNING_AV_URL_START1:
FIL_DATA_REST = TRIM$(REMAIN$(FIL_DATA, " href="))
IF LEN(FIL_DATA_REST) = 0 THEN GOTO UTTAGNING_AV_HREF_I_FILEN_END
GOTO START_UTTAGNING_AV_URL
START_UTTAGNING_AV_URL:
IF MID$(FIL_DATA_REST,1, 1) = CHR$(34) THEN GOTO UTTAGNING_AV_URL_MED_CITTATIONSTECKEN
GOTO UTTAGNING_AV_URL_MED_MELLANSLAG
UTTAGNING_AV_URL_MED_MELLANSLAG:
URL = EXTRACT$(FIL_DATA_REST, " ")
FIL_DATA = REMAIN$(FIL_DATA_REST, " ")
GOTO RENSNING_AV_URL
UTTAGNING_AV_URL_MED_CITTATIONSTECKEN:
FIL_DATA_REST = MID$(FIL_DATA_REST, 2) ' Första cittationstecken tas bort
URL = EXTRACT$(FIL_DATA_REST, CHR$(34))
FIL_DATA = REMAIN$(FIL_DATA_REST, CHR$(34))
RENSNING_AV_URL:
URL = TRIM$(URL)
IF INSTR(LCASE$(URL), "mailto:") > 0 THEN GOTO SOKNING_AV_URL_START1
IF INSTR(LCASE$(URL), "javascript:") > 0 THEN GOTO SOKNING_AV_URL_START1
IF INSTR(LCASE$(URL)+" ", ".exe") > 0 THEN GOTO SOKNING_AV_URL_START1
IF URL = "/" THEN GOTO SOKNING_AV_URL_START1
IF MID$(URL, 1, 1) = "/" THEN URL = MID$(URL, 2)
UTTAGNING_AV_URL_SAJT_OCH_URL_FIL:
URL_SAJT = URL_SAJT_AKTUELL
URL_FIL = URL
IF MID$(UCASE$(URL), 1, 7) <> "HTTP://" THEN GOTO UTTAGNING_AV_URL_SAJT__OCH_URL_FIL_END
URL_SAJT = EXTRACT$(MID$(URL, 8), "/")
IF MID$(URL_SAJT, LEN(URL_SAJT), 1) = "/" THEN URL_SAJT = MID$(URL_SAJT, 1, LEN(URL_SAJT) - 1)
URL_FIL = REMAIN$(MID$(URL, 8), "/")
IF MID$(URL_FIL, LEN(URL_FIL), 1) = "/" THEN URL_FIL = MID$(URL_FIL, 1, LEN(URL_FIL) - 1)
UTTAGNING_AV_URL_SAJT__OCH_URL_FIL_END:
BORTTAG_AV_SNESTRECK_I_SLUTET:
IF MID$(URL_SAJT, LEN(URL_SAJT), 1) = "/" THEN URL_SAJT = MID$(URL_SAJT, 1, LEN(URL_SAJT) - 1)
IF MID$(URL_FIL, LEN(URL_FIL), 1) = "/" THEN URL_FIL = MID$(URL_FIL, 1, LEN(URL_FIL) - 1)
TEST_PA_URL_SAJT:
IF UCASE$(URL_SAJT) <> UCASE$(URL_SAJT_AKTUELL) THEN GOTO SOKNING_AV_URL_START1
EXLUDERA_VISA_FILTYPER:
IF INSTR(URL_FIL, ".bat") > 0 THEN GOTO SOKNING_AV_URL_START1
IF INSTR(URL_FIL, ".mp3") > 0 THEN GOTO SOKNING_AV_URL_START1
IF INSTR(URL_FIL, ".exe") > 0 THEN GOTO SOKNING_AV_URL_START1
IF INSTR(URL_FIL, ".gif") > 0 THEN GOTO SOKNING_AV_URL_START1
IF INSTR(URL_FIL, ".jpg") > 0 THEN GOTO SOKNING_AV_URL_START1
IF INSTR(URL_FIL, ".bmp") > 0 THEN GOTO SOKNING_AV_URL_START1
IF INSTR(URL_FIL, ".doc") > 0 THEN GOTO SOKNING_AV_URL_START1
SOK_URL_FIL:
FOR R = 1 TO ANTAL_URL_FIL_TAB
IF URL_FIL_TAB (R) = URL_FIL THEN GOTO SOKNING_AV_URL_START1
NEXT R
INCR ANTAL_URL_FIL_TAB
IF ANTAL_URL_FIL_TAB > 1000000 THEN
LOCATE 10,1
PRINT "URL_FIL_TAB för liten"
GOTO SLUTSEKVENS
END IF
URL_FIL_TAB (ANTAL_URL_FIL_TAB) = URL_FIL
GOTO SOKNING_AV_URL_START1
UTTAGNING_AV_HREF_I_FILEN_END:
START_HAMTNING_AV_NY_SIDA:
'========================
'
NAST_RAD:
INCR NR_TAB
IF NR_TAB > ANTAL_URL_FIL_TAB THEN GOTO SLUTSEKVENS
URL_FIL = URL_FIL_TAB (NR_TAB)
SVAR = SKRIV_TAL(ANTAL_URL_FIL_TAB, 6, 17)
GOTO HAMTNING_AV_WEBSIDA
FELBEHANDLING:
'=============
'
LOCATE 10,1
PRINT "FEL="; ERR
PRINT #FILNR_LOGGFIL, "FEL="; ERR
GOTO PROGRAMSLUT
SLUTSEKVENS:
'===========
'
AVSLUTNING:
IF AVBRYT > 0 THEN PRINT #FILNR_LOGGFIL, "KÖRNING AVBRUTEN MED <ESC>"
CLOSE #FILNR_LOGGFIL
LOCATE 19, 1
STARTA_KONVERTERING_TILL_TEXTFIL:
UTFIL_NAMN_FORLED = EXTRACT$(UTFIL_NAMN, ".HTM")
KOMRAD = "HTMLTOTXT " + UTFIL_NAMN + " " + URL_SAJT_AKTUELL + ".txt"
PID = SHELL(KOMRAD)
PROGRAMSLUT:
END FUNCTION
'*****************************************************************
' *
' F U N K T I O N E R *
' *
'*****************************************************************
FUNCTION SKRIV_TAL(TAL AS LONG, RADNR AS LONG, KOLNR AS LONG) AS LONG
'==========================================================
'
DIM ANTAL_TEXT AS LOCAL STRING
ANTAL_TEXT = SPACE$(9)
RSET ANTAL_TEXT = FORMAT$(TAL, "#,###,##0")
REPLACE "," WITH "." IN ANTAL_TEXT
LOCATE RADNR, KOLNR
PRINT ANTAL_TEXT;
END FUNCTION