As promised yesterday the 'code' to view a remote webcam.
It is in two parts since the original code used 'urldownloadtofile()' which is not very accurate (the least).
Looking on the board found (old) code by ElChiconi modified it an hé presto a 'talking' download, now at least we now why we can not download a 'camera'.
As you van see very simple (i think).
First the download.pb
Code: Select all
#INTERNET_FLAG_RELOAD = $80000000
#INTERNET_DEFAULT_HTTP_PORT = 80
#INTERNET_SERVICE_HTTP = 3
#HTTP_QUERY_FLAG_NUMBER = $20000000
#HTTP_QUERY_CONTENT_LENGTH = 5
#HTTP_QUERY_STATUS_CODE = 19
#HTTP_STATUS_OK = 200
#INTERNET_OPEN_TYPE_DIRECT = 1
Enumeration 1
#dl_noInet
#dl_Urlfail
#dl_NoConn
#dl_HTTPfail
#dl_HTTPsend
#dl_HTTPqry
#dl_STATfail
#dl_CLENfail
#dl_NOmem
#dl_NOfile
#dl_FAIL
EndEnumeration
Dim dl_Errors.s( 20)
dl_Errors( #dl_noInet) = "Internet connection not available."
dl_Errors( #dl_Urlfail) = "InternetOpenUrl_() failed"
dl_Errors( #dl_NoConn) = "Unable to connect to "
dl_Errors( #dl_HTTPfail) = "Http open failed to "
dl_Errors( #dl_HTTPsend) = "Http send request failed to "
dl_Errors( #dl_HTTPqry) = "Http query failed."
dl_Errors( #dl_STATfail) = "Status code query failed."
dl_Errors( #dl_CLENfail) = "CONTENT_LENGTH query failed."
dl_Errors( #dl_NOmem) = "Not enough memory."
dl_Errors( #dl_NOfile) = "Unable to create file: "
dl_Errors( #dl_FAIL) = "Download failed."
; dl_Errors( ) =
Procedure CheckError( value.l, message.l, terminate.l, mess.s = "")
Shared dl_Errors.s()
If value=0
MessageRequester("Error", dl_Errors.s( message.l)+mess.s)
If terminate
End
EndIf
EndIf
EndProcedure
Procedure Download(URL$, LocalFile$)
Domain$ = RemoveString(Left(URL$, FindString(URL$, "/", 8)-1), "http://")
dwordSize = 4
hInet = InternetOpen_("Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.7.8) Gecko/20050511 Firefox/1.0.4", #INTERNET_OPEN_TYPE_DIRECT, #Null, #Null, 0)
CheckError(hInet, #dl_noInet, #True)
hURL = InternetOpenUrl_(hInet, URL$, #Null, 0, #INTERNET_FLAG_RELOAD, 0)
CheckError(hURL, #dl_Urlfail, #True, URL$)
hInetCon = InternetConnect_(hInet, Domain$, #INTERNET_DEFAULT_HTTP_PORT, #Null, #Null, #INTERNET_SERVICE_HTTP, 0, 0)
CheckError(hInetCon, #dl_NoConn, #True, Domain$)
hHttpOpenRequest = HttpOpenRequest_(hInetCon, "HEAD", RemoveString(URL$, "http://"+Domain$+"/"), "http/1.0", #Null, 0, #INTERNET_FLAG_RELOAD, 0)
CheckError(hHttpOpenRequest, #dl_HTTPfail, #True, Domain$)
CheckError(HttpSendRequest_(hHttpOpenRequest, #Null, 0, 0, 0), #dl_HTTPsend, #True, Domain$)
CheckError(HttpQueryInfo_(hHttpOpenRequest, #HTTP_QUERY_FLAG_NUMBER|#HTTP_QUERY_STATUS_CODE, @sCode, @dwordSize, @lpdwIndex), #dl_HTTPqry, #False)
CheckError(sCode=#HTTP_STATUS_OK, #dl_STATfail, #False)
CheckError(HttpQueryInfo_(hHttpOpenRequest, #HTTP_QUERY_FLAG_NUMBER|#HTTP_QUERY_CONTENT_LENGTH, @sCode, @dwordSize, @lpdwIndex), #dl_CLENfail, #False)
If sCode
DataBufferLength = sCode
Else
DataBufferLength = 4096
EndIf
*DataBuffer = AllocateMemory(DataBufferLength)
CheckError(*DataBuffer, #dl_NOmem, #True)
CheckError( CreateFile(0, LocalFile$), #dl_NOfile, #True, localFile$)
Repeat
CheckError( InternetReadFile_(hURL, *DataBuffer, DataBufferLength, @Bytes), #dl_FAIL, #True)
If Bytes
WriteData( 0, *DataBuffer, Bytes)
EndIf
Until Bytes=0
CloseFile(0)
FreeMemory(*DataBuffer)
InternetCloseHandle_(hInetCon)
InternetCloseHandle_(hURL)
InternetCloseHandle_(hInet)
EndProcedure
; Download("http://xoap.weather.com/weather/local/USNY0181?cc=*&dayf=1", "c:\sources\purebasic\webcam\weather.xml")
second the 'camera' program:
Code: Select all
;
; ------------------------------------------------------------
; Purebasic Webcam viewer by midebor (mdb@skynet.be)
; The programm uses URLDownloadToFile Api to download Webcam images
; to temp.jpg file and displays them using the UseJPEGImageDecoder()
; function.
; The program assumes you are already connected To the Internet
; Has only been tested with ADSL connection
; ------------------------------------------------------------
; 18jul2006
; Modified by Jan J. Vooijs (jan.vooijs@wanadoo.nl)
; - No more array but a linked list if a cam no longer works you can shut it down by one ';' character.
; - It uses Download.pb as the downloader, now we get a verbal warning what is wrong.
; Download code by ElChiconi (thanks)..
; - Much simpler loading of the image into a screen.
;
XIncludeFile "download.pb"
UseJPEGImageDecoder() ; to decode the "temp.jpg" file
; ------------------ List of camera's ------------------------
NewList slCams.s()
AddElement( slCams()) : slCams() = "Antwerpen Zeevaartschool ! http://www.hzs.be/antwerp/schelde.jpg"
; AddElement( slCams()) : slCams() = "Bad Godesberg ! http://www.general-anzeiger-bonn.de/images/neteye/stadthaus.jpg"
AddElement( slCams()) : slCams() = "Berlin - Podsdammerplatz ! http://www.cityscope.de/pp/panos/cityscope.jpg"
; AddElement( slCams()) : slCams() = "Bruxelles Avenue de Terveuren ! http://camera.viking.be/images/ispy.jpg"
AddElement( slCams()) : slCams() = "CFN WebCam ! http://www.spiretech.com/~leonard/cfn/webcam/webcam.jpg"
; AddElement( slCams()) : slCams() = "DAX ! http://deutsche-boerse.com/parkett/parkett2.jpg"
; AddElement( slCams()) : slCams() = "De Haan Belgium ! http://www.dehaan.be/webcam/Video01.jpg"
; AddElement( slCams()) : slCams() = "Del Mar Beach Cam ! http://os1.prod.camzone.com/camzone-ie?delmar:1:1025193280125:0"
; AddElement( slCams()) : slCams() = "Dome of Cologne ! http://www.wdr.de/domcam.jpg"
; AddElement( slCams()) : slCams() = "Essen-Kupferdreh ! http://www.kupferdreh.de/cam.jpg"
AddElement( slCams()) : slCams() = "Europe Weather Satelite ! http://www.usatoday.com/weather/twc_images/europesat_440x297.jpg"
; AddElement( slCams()) : slCams() = "GameStar Online-Webcam ! http://www.gamestar.de/aktuell/webcam/cam.jpg"
AddElement( slCams()) : slCams() = "Ground Zero ! http://65.200.140.25/ec_metros/ourcams/johnst.jpg"
AddElement( slCams()) : slCams() = "Iowa State University ! http://www.iastate.edu/webcam/hugesize.jpg"
AddElement( slCams()) : slCams() = "Jericho Beach, Vancouver ! http://www.jericho.ca/webcam/images/webcam.jpg"
; AddElement( slCams()) : slCams() = "Kauai, Hawaii ! http://hawaiiweathertoday.com/images/webcam_kauai.jpg"
AddElement( slCams()) : slCams() = "Knokke, Belgium ! http://www.quiksilver.be/beachcam/live/beach.jpg"
AddElement( slCams()) : slCams() = "Koenigssee, Germany ! http://www.koenigssee.com/rodelbahn/fsc4.jpg"
; AddElement( slCams()) : slCams() = "La Tour Eifel ! http://www.images-abcparislive.com/eiffel1.jpg?1011467343523"
AddElement( slCams()) : slCams() = "La Tour Eifel (2) ! http://www.images2-abcparislive.com/eiffelcam1.jpg?1153262971609"
AddElement( slCams()) : slCams() = "Louvain La Neuve, Belgium ! http://www.sri.ucl.ac.be/SRI/webcam/universite.jpg"
AddElement( slCams()) : slCams() = "MGM Grand (Las Vegas) ! http://images.earthcam.com/ec_metros/ourcams/mgm.jpg"
; AddElement( slCams()) : slCams() = "Midvale Hill (Highway 95) ! http://www.ruralnetwork.net/~rnsmvlcm/midvalehill.jpg"
AddElement( slCams()) : slCams() = "MOBOTIX M1 PreParkCam ! http://preparkcam.mobotixserver.de/record/current.jpg"
AddElement( slCams()) : slCams() = "New York Times Square Cam 1 ! http://images.earthcam.com/ec_metros/ourcams/lindys.jpg"
AddElement( slCams()) : slCams() = "New York Times Square Cam 2 ! http://images.earthcam.com/ec_metros/ourcams/lennon.jpg"
AddElement( slCams()) : slCams() = "Niagara Falls ! http://www.fallsview.com/fallsmain.jpg"
AddElement( slCams()) : slCams() = "Nieuwpoort, Belgium ! http://www.vvwnieuwpoort.be/webcam/images/webcam.jpg"
AddElement( slCams()) : slCams() = "Oostende aan zee, Belgium ! http://aanzee.be/images/groot.jpg"
; AddElement( slCams()) : slCams() = "Oostende Camera radioamateurs ! http://www.flanderswebhost.com/webcams/radiocam/radiocam.jpg"
; AddElement( slCams()) : slCams() = "Oostende Webcam, Belgium ! http://www.oostende.net/webcam/oostendecam.jpg"
AddElement( slCams()) : slCams() = "Panama Canal, Miraflores Locks ! http://www.pancanal.com/miraflores/miraflores.jpg"
; AddElement( slCams()) : slCams() = "Poppies Pool, Bali ! http://www.poppies.net/webcam.jpg"
; AddElement( slCams()) : slCams() = "Poppies Restaurant, Bali ! http://www.poppies.net/webcam1.jpg"
; AddElement( slCams()) : slCams() = "Prague ! http://193.165.174.197/fullsize.jpg"
AddElement( slCams()) : slCams() = "PSC/EET Weather Station (New York) ! http://www.paulsmiths.edu/aai/eet/aaicam.jpg"
; AddElement( slCams()) : slCams() = "San Diego Zoo Panda Cam ! http://outstream.camzone.com/camzone-ie?zoo:2:1020871595627:0"
; AddElement( slCams()) : slCams() = "World - Shamu Cam ! http://outstream.camzone.com/camzone-ie?shamu:13:1023798289913"
AddElement( slCams()) : slCams() = "Seattle ! http://images.earthcam.com/ec_metros/washingtonst/seattle/marqueen.jpg"
AddElement( slCams()) : slCams() = "Stadt Neuburg, Germany ! http://www.neuburg-donau.de/donaucam/donaukai.jpg"
; AddElement( slCams()) : slCams() = "Trafalgar Square, London ! http://www.webviews.co.uk/liveimages/trafalgarsq.jpg"
AddElement( slCams()) : slCams() = "University of Arizona ! http://www.cs.arizona.edu/camera/view.jpg"
AddElement( slCams()) : slCams() = "University of Iowa ! http://www.iihr.uiowa.edu/webcam/cam.jpg"
AddElement( slCams()) : slCams() = "USS Intrepid Cam (New York City) ! http://65.200.140.25/ec_metros/ourcams/intrepid.jpg"
AddElement( slCams()) : slCams() = "Waikiki in Honolulu ! http://images.earthcam.com/ec_metros/hawaii/waikiki.jpg"
AddElement( slCams()) : slCams() = "Washington Memorial ! http://images.earthcam.com/ec_metros/washington/metrosquare.jpg"
AddElement( slCams()) : slCams() = "Weimar ! http://www.thueringer-webcams.de/weimar/theaterplatz/fullsize.jpg"
AddElement( slCams()) : slCams() = "WorldTradeAftermath.com ! http://worldtradeaftermath.com/capture0.jpg"
AddElement( slCams()) : slCams() = "Zeebrugge, Belgium ! http://www.rustyhouse.com/beachcam/beachcam.jpg"
ForEach slCams.s()
Nam.s = Trim( StringField( slCams(), 1, "!"))
Url.s = Trim( StringField( slCams(), 2, "!"))
Debug "Nam = " + Nam.s + " Url: "+ Url.s
Download( Url.s, "temp.jpg")
If OpenWindow(0, 0, 0, 800, 600, "PB - Webcam " + Nam.s, #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
Result.l = LoadImage( #PB_Any, "temp.jpg") ; change 2nd parameter to the path/filename of your image..
If Result.l
ImageGadget(0, 10, 10, ImageWidth( Result.l), ImageHeight( Result.l), ImageID( Result.l)) ; imagegadget standard
; ImageGadget(1, 130, 10, 100, 83, ImageID(0), #PB_Image_Border) ; imagegadget with border
EndIf
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Else
MessageRequester("Error", "Can't load the image...", 0)
EndIf
Next
End
All very simple and working it is code for PB4.0 (but it worked originaly for 3.94).
As you can see some cameras are no longer functional those are commented out.
Have fun with it!!
Jan V.