Call a Google Search web-service using sockets

Posted by rstanciu on 21-Oct-2008 11:27

/*********************************************************

File : httppostGoogleSearch.p

Desc: Call a Google Search web-service using sockets

Progress version: v.9.x, v.10.x

*********************************************************/

DEFINE VARIABLE vcHost AS CHARACTER INITIAL "api.google.com" NO-UNDO.

DEFINE VARIABLE vcPort AS CHARACTER INITIAL "80" NO-UNDO.

DEFINE VARIABLE stringToSearch AS CHARACTER NO-UNDO.

DEFINE VARIABLE vhSocket AS HANDLE NO-UNDO.

stringToSearch = "Progress Software".

CREATE SOCKET vhSocket.

vhSocket:CONNECT('-H ' + vcHost + ' -S ' + vcPort) NO-ERROR.

IF vhSocket:CONNECTED() = FALSE THEN DO:

MESSAGE "Connection failure" SKIP

ERROR-STATUS:GET-MESSAGE(1) VIEW-AS ALERT-BOX.

RETURN.

END.

vhSocket:SET-READ-RESPONSE-PROCEDURE('getResponse').

RUN PostRequest.

WAIT-FOR READ-RESPONSE OF vhSocket.

vhSocket:DISCONNECT() NO-ERROR.

DELETE OBJECT vhSocket.

QUIT.

/*********************************************************/

PROCEDURE getResponse:

DEFINE VARIABLE vcWebResp AS CHARACTER NO-UNDO.

DEFINE VARIABLE lSucess AS LOGICAL NO-UNDO.

DEFINE VARIABLE mResponse AS MEMPTR NO-UNDO.

IF vhSocket:CONNECTED() = FALSE THEN do:

MESSAGE 'Not Connected' VIEW-AS ALERT-BOX.

RETURN.

END.

lSucess = TRUE.

DO WHILE vhSocket:GET-BYTES-AVAILABLE() > 0:

SET-SIZE(mResponse) = vhSocket:GET-BYTES-AVAILABLE() + 1.

SET-BYTE-ORDER(mResponse) = BIG-ENDIAN.

vhSocket:READ(mResponse,1,1,vhSocket:GET-BYTES-AVAILABLE()).

vcWebResp = vcWebResp + GET-STRING(mResponse,1).

END.

SET-SIZE(mResponse) = 0.

/*

*PUT HERE THE CODE TO MANIPULATE THE ANSWER

*/

OUTPUT TO googleResponse.html.

PUT UNFORMATTED vcWebResp.

OUTPUT CLOSE.

END.

/*********************************************************/

PROCEDURE PostRequest:

DEFINE VARIABLE vcRequest AS CHARACTER NO-UNDO.

DEFINE VARIABLE mRequest AS MEMPTR NO-UNDO.

DEFINE VARIABLE mData AS CHARACTER NO-UNDO.

mData =

'' + 'rn'.

vcRequest =

'POST /search/beta2 HTTP/1.0' + 'rn' +

'Accept: /' + 'rn' +

'TE: trailers' + 'rn' +

'Host: ' + vcHost + ':' + vcPort + 'rn' +

'Cache-Control: no-cache' + 'rn' +

'Connection: TE' + 'rn' +

'Pragma: no-cache' + 'rn' +

'SOAPAction: "urn:GoogleSearchAction"' + 'rn' +

'User-Agent: Progress 4GL Client' + 'rn' +

'Content-Length: ' + STRING(LENGTH(mData)) + 'rn' +

'Content-Type: text/xml; charset=UTF-8' + 'rn' +

'' + 'rn' + mData.

SET-SIZE(mRequest) = 0.

SET-SIZE(mRequest) = LENGTH(vcRequest) + 1.

SET-BYTE-ORDER(mRequest) = BIG-ENDIAN.

PUT-STRING(mRequest,1) = vcRequest .

vhSocket:WRITE(mRequest, 1, LENGTH(vcRequest)).

END PROCEDURE.

/*********************************************************/

All Replies

This thread is closed