Calling Javascript functions

BlitzMax Forums/BlitzMax Programming/Calling Javascript functions

Finally, that JSON parser seems like an awful lot of code to use if you'll only ever be looking for the text between '"translatedText":"' and '"', to me.
Yep, but I think I'll be using it for config and whatnot aswell..

Nothing I changed made a connection (using "http::" and writeline("GET /" + url + "HTTP/1.0 (or 1.1) ~r~n~r~n")), OpenStream still returns null. I think I'll be using my modified THttp type (codearcs), as it seemed to work before for getting pages.

I swear I had it getting pages just a few hours ago.. now its not working. I checked against your HTTP header code, all seems to be in place...

(See the Get method)
SuperStrict

Framework brl.standardio
Import brl.stream
Import brl.Socket
Import brl.socketstream
Import brl.retro
Import brl.filesystem
Import brl.LinkedList
Import brl.Map

Include "json.bmx"

Local word:String = "Hello there!"
Local Text:String = GetHTTPString("www.ajax.googleapis.com", "ajax/services/language/Translate?v=1.0&q=" + word + "&langpair=en%7Cel")

Print Text

'Local json:TJSON = TJSON.Create(Text)

'Print json.GetValue("translatedText").ToString()


Function GetHTTPString:String(url:String, page:String)
rem
  Local stream:TStream = OpenStream("tcp::" + url), data:String
  
	If stream <> Null
	   stream.WriteString("GET /" + page + " HTTP/1.0~r~n~r~n")
		
		data = LoadString(stream)
		
		SaveText(data, "text.txt")
		
	Else
		DebugLog "Failed to open " + url
		
	End If
   
   Return data
  endrem
	
  Local httpd:THttp = New(THttp)
	
	If httpd.open(url)
	  Local htrd:HTTPReturnData = httpd.Get(page)
		
		If htrd <> Null
			Return htrd.Content
			
		Else
		   Return Null
		   
		End If
		
	Else
	   Return Null
	   
	End If
	
End Function

Type THttp
	Field sock:TSocket
	Field stream:TStream
	Field host:String
	Field agent:String = "HTTPGET/1.0"
	Field autoClose:Int
	
		Method Open:Int(host:String, autoClose:Int = False) 
		  Self.sock = CreateTCPSocket()
			 
			If ConnectSocket(Self.sock, HostIp(host), 80) 
				Self.host = host
				Self.stream = CreateSocketStream(Self.sock) 
				Self.autoClose = autoClose
			   Return True
				
			Else
			   Return False
				
			End If
			
		End Method
		
		Method Get:HTTPReturnData(Get:String = "")
		  Local HTRD:HTTPReturnData = New(HTTPReturnData), buffer:String, rlnewline:String
			
			stream.WriteString("GET /" + Get + " HTTP/1.0~nHOST: " + host + "~r~n~r~n")
			
		   'WriteLine(stream, "GET /" + get + " HTTP/1.0~nHost: " + Self.host + "~nUser-Agent: " + Self.agent + "~n~n") 
		   'WriteLine stream, "GET /" + Get + " HTTP/1.0" ' GET / gets Default page
		   'WriteLine stream, "Host: " + host
		   'WriteLine stream, "User-Agent: " + agent
		   'WriteLine stream, "Accept: */*"
		   'WriteLine stream, ""
		
		  Local cExtType:String, cExt:String, cLength:Int
		   ReadLine(stream)
			While Not Eof(stream)
			  rlnewline = ReadLine(stream)
			  
			  Local spos:Int = Instr(rlnewline, ":")
				Select Lower(Left(rlnewline, spos - 1))
					Case "content-type"
					  Local prtmp:String = Mid(rlnewline, spos + 2, Instr(rlnewline, ";") - spos - 2), slpos:Int = Instr(prtmp, "/")
					  cExtType = Left(prtmp, slpos - 1) cExt = Right(prtmp, prtmp.Length - slpos)
						
					Case "content-length"
						cLength = Int(Right(rlnewline, rlnewline.Length - spos - 1))
						
					Case ""
					   Exit
						
				End Select
				
			Wend
			
			While Not Eof(stream) 
			  rlnewline = ReadLine(stream)
				
				buffer:+ rlnewline + "~n"
				
			Wend
			
		  HTRD.Set(Left(buffer, buffer.Length - 1), cExtType, cExt, cLength)
			
		   If autoClose Close() 
		   
		   Return HTRD
		 
		End Method
		
		Method Post:String(page:String = "", keys:String[] , values:String[] ) 
		  Local buffer:String
		  Local data:String
		  Local i:Int
			
			For i = 0 To keys.Length - 1
				data:+ UrlEncode(keys[i] ) + "=" + UrlEncode(values[i] ) + "&"
				
			Next
			
		  data = Left(data, data.Length - 1) 
			WriteLine(stream, "POST /" + page + " HTTP/1.0~nHost: " + Self.host + "~nUser-Agent: " + Self.agent + "~nContent-Length: " + data.Length + "~nContent-Type: application/x-www-form-urlencoded~n~n" + data) 
			
			While Not Eof(stream) 
				buffer:+ReadLine(stream) + "~n"
				
			Wend
			
		 If autoClose Close() 
		
		   Return Left(buffer, buffer.Length - 1) 
			
		End Method
		
		Method Close() 
			If Self.stream CloseStream(Self.stream) 
			If Self.sock CloseSocket(Self.sock) 
			
		End Method
	
		Function UrlEncode:String(url:String) 
		  Local buffer:String
		  Local Char:Int
		  Local i:Int
			
			For i = 1 To url.Length
			  Char = Asc(Mid(url, i, 1)) 
				
				If(Char >= 48 And Char <= 57) Or (Char >= 65 And Char <= 90) Or (Char >= 97 And Char <= 122) Or Char = 43 Or Char = 45 Or Char = 46 Or Char = 95
					buffer = buffer + Chr(Char) 
					
				Else
					buffer = buffer + "%" + Right(Hex(Char), 2) 
					
				End If
				
			Next
			
		   Return buffer
		
		End Function
		
		Function UrlDecode:String(url:String) 
		  Local sHex:String = "0123456789ABCDEF"
		  Local buffer:String
		  Local i:Int
			
			For i = 1 To url.Length
				If Mid(url, i, 1) = "%"
					buffer = buffer + Chr(Instr(sHex, Mid(url, i + 1, 1)) Shl 4 + Instr(sHex, Mid(url, i + 2, 1)) - 17) 
				   i:+ 2
					
				Else
					buffer = buffer + Mid(url, i, 1)
					 
				End If
				
			Next
			
		   Return buffer
		
		End Function
	
End Type

Type HTTPReturnData
	Field Content:String
	Field ContLength:Int
	
	Field ExtensionType:String
	Field Extension:String		
		
		Method Set(Cont:String, ExtType:String, Ext:String, CLen:Int)
			Content = Cont
			ContLength = CLen
			Extension = Ext
			ExtensionType = ExtType
			
		End Method
		
		Method SaveContent(File:String, useExt:Int = False)
		 
		 If useExt File:+ "." + Extension
			
			SaveText(Content, File)
			
		End Method
		
		Method ToString:String()
			Return "Content-Type: " + ExtensionType + "/" + Extension + "~nContent-Length: " + ContLength
			
		End Method
		
End Type