Hi Vic, HomerJax is analagous to Homer Shared Object or GW Toolkit in that it is mainly intended as a set of helpers for other scripts to use, rather than delivering end-user functionality itself. I found that programming a web client is complex enough that it is substantially aided by convenience functions that take care of much of the details about interacting with a web server. Each site/server is different though, so some knowledge of the specific URLs and return formats it uses is generally necessary.
Let me know if you have further questions. Jamal -- Original Message -- > Date: Sat, 1 Aug 2009 10:12:21 -0400 > From: Vic Beckley <[email protected]> > Reply-To: [email protected] > To: [email protected] > Subject: RE: Introducing HomerJax package for accessing Internet resources > > Jamal, > > Does this script do anything on its own? In my degree program I am trying > to access a live chat session which uses Java, AJAX and XML. How would I > make it work with this? Or did I miss the purpose altogether? > > Vic > > > -----Original Message----- > From: Jamal Mazrui [mailto:[email protected]] > Sent: Saturday, August 01, 2009 9:26 AM > To: [email protected] > Subject: Re: Introducing HomerJax package for accessing Internet resources > > I should have explained the HomerJax demo a bit more. It is a VBScript > file, HomerJaxDemo.vbs, which relies on the shared object registered by > HomerJax.js, and is run via the Help button of that global script. No > other scripts are needed. The demo shows how you can easily get the > content type, source HTML, or plain text of a web page; how you can > download a file to disk, how you can get messages from the public > timeline of Twitter.com, or poast a tweet if you have a Twitter account. > The demo shows how data is converted from JavaScript Object Notation > (JSON) to what I call COM exchange format, and how XML data may be > conveniently accessed as well. > > Jamal > On Sat, 1 Aug 2009, Jamal Mazrui wrote: > > > Date: Sat, 1 Aug 2009 09:10:41 -0400 (EDT) > > From: Jamal Mazrui <[email protected]> > > Reply-To: [email protected] > > To: [email protected] > > Subject: Introducing HomerJax package for accessing Internet resources > > > > HomerJax beta 0.5 > > > > This is a global shared object for reading and writing data from the > > Internet, now available at Script Central. To help you initially > > understand its capabilities, I am pasting the current documentation below. > > Use the Help button in Script Manager to read the documentation in your > > web browser, or to run a demo. > > > > Jamal > > > > HomerJax > > Beta 0.5 > > August 1, 2009 > > > > Copyright 2009 by Jamal Mazrui > > GNU Lesser General Public License (LGPL) > > > > Contents > > > > Introduction > > COM Exchange Format > > Dialog Methods > > File Methods > > Folder Methods > > HTML Methods > > JScript Data Methods > > Path Methods > > Regular Expression Methods > > Registry Methods > > Shell Methods > > String Methods > > Variant Data Methods > > Web Request Methods > > XML Methods > > Development Notes > > ---------- > > > > Introduction > > > > HomerJax is a library of convenience functions for accessing Internet > > resources. It is written in JScript, the Microsoft version of JavaScript, > > and is dependent on several COM servers distributed with Windows. The > > word "Homer" is a brand name I sometimes use for developer tools I create. > > The word "Jax" derives from Ajax, which originally meant "Asynchronous > > JavaScript and XML." Ajax technologies focus on building dynamic user > > interfaces in web browsers. HomerJax functions use some of these core > > technologies, but focus on reading, interpreting, and writing data from > > the Internet. > > > > Since the Internet is a great source of accessible information for people > > with visual disabilities who cannot readily read the printed word, my hope > > is that this library makes it easier for developers, including blind ones > > like myself, to build applications that take advantage of new social > > networking sites such as Twitter, FaceBook, and many others. I intend for > > HomerJax to be accessible via various programming environments, including > > the Windows Script Host, screen reader scripting languages, and other > > programming languages via a COM server interface. > > > > The functionality and documentation of HomerJax will improve over time in > > response to comments, questions, and suggestions. Code contributions are > > also welcome. > > ---------- > > > > COM Exchange Format > > > > The Component Object Model (COM) is a set of Windows standards by which > > different programming languages and applications can communicate. COM > > uses a flexible data type called a variant, which can be an individual > > value, array of values, or complex object with methods, properties, and > > events. In general, any COM client can use string, numeric, and COM > > objects as the data types of parameters or return values. Some, however, > > cannot use arrays. COM exchange format is intended to support > > collections, as well as primitive data types, for use by any COM client. > > Rather than an array, a list COM object is used from the .NET Framework > > (any version). A COM object dictionary is also used from the Windows > > Script Host. > > > > By convention, HomerJax variable names use lower case prefixes to indicate > > the data type: s for string, i for integer, n for floating point number, > > l for list, d for dictionary, and o for other COM object. HomerJax > > includes various methods for converting between JavaScript Object Notation > > (JSON), variant data types, and COM exchange format. This provides much > > flexibility for accessing data on the Internet. > > > > ---------- > > > > Dialog Methods > > > > These are simple, modal dialogs. Parameters supply values that are needed > > in reading order of the dialog window, from top to bottom and left to > > right. Thus, the window title is the first parameter. DialogShow > > displays information; DialogConfirm prompts for confirmation; and > > DialogInput prompts for input. > > > > DialogConfirm(sTitle, sMessage, sDefault) > > Get choice from a standard Yes, No, or Cancel message box > > > > DialogInput(sTitle, sField, sValue) > > Get input from a single edit box > > > > DialogShow(oTitle, oMessage) > > Show string version of two parameters in the title and prompt of a message > > box > > ---------- > > > > File Methods > > > > These copy, move, delete, or test for existence of files. > > > > FileCopy(sSource, sTarget) > > Copy source to destination file, replacing if it exists > > > > FileDelete(sFile) > > Delete a file if it exists, && test whether it is subsequently absent > > > > FileExists(sFile) > > Test whether File exists > > > > FileGetDate(sFile) > > Get date of a file > > > > FileGetSize(sFile) > > Get size of a file > > > > FileGetType(sFile) > > Get file type > > > > FileMove(sSource, sTarget) > > Move source to destination file, replacing if it exists > > > > FileToString(sFile) > > Get content of text file > > ---------- > > > > Folder Methods > > > > These copy, move, delete, or test for existence of folders. > > > > FolderCopy(sSource, sTarget) > > Copy source to destination Folder, replacing if it exists > > > > FolderCreate(sFolder) > > Create folder > > > > FolderDelete(sFolder) > > Delete a Folder if it exists, && test whether it is subsequently absent > > > > FolderExists(sFolder) > > Test whether folder exists > > > > FolderGetDate(sFolder) > > Get date of a Folder > > > > FolderGetSize(sFolder) > > Get size of folder, summing the sizes of files && subfolders it contains > > > > FolderMove(sSource, sTarget) > > Move source to destination Folder, replacing if it exists > > ---------- > > > > HTML Methods > > > > These get page text, table text, or URLs of HTML. > > > > HtmlEncodeString(sText) > > Encode a string for HTML or XML > > > > HtmlGetLinks(sUrl) > > Get a list of two-item lists containing the URL and text of a link > > > > HtmlGetUrls(sUrl) > > Get a list of URLs linked to a web page > > > > HtmlGetText(sUrl) > > Get the text of an HTML page > > > > HtmlGetTableText(sUrl, iTable) > > Get the text of an HTML table specified by number, or null for all of them > > ---------- > > > > JScript Data Methods > > > > These convert between JScript and variant data types. > > > > JsDictionaryToEncodedString(d) > > Convert dictionary to string with http encoding > > > > JsDictionaryToVt(d) > > Convert JScript dictionary to variant > > > > JsInspectObject(sName, oValue) > > Report on type of object and its subobjects > > > > JsIsBlank(sText) > > Test if string is empty or white space > > > > JsIsMute(o) > > test for empty string > > > > JsIsNull(o) > > Test for null > > > > JsIsObject(o) > > Test for object > > > > JSNumber(o) > > Convert to JScript number > > > > JsObjectToVt(oValue) > > Convert JScript object to variant > > > > JsPrint(o) > > Print to screen using console mode of Windows Script Host > > > > JsPrintObject(sName, oValue) > > Print type of object and its subobjects > > > > JsString(o) > > Convert to a JScript string > > > > JsToVt(sJs) > > Convert string in JavaScript Object Notation to COM exchange format > > ---------- > > > > Path Methods > > > > These parse file or folder paths into their components; get paths of > > Windows special folders; or create temporary files. > > > > PathCombine(sFolder, sName) > > Combine folder && name to form a valid path > > > > PathCreateTempFolder() > > Create temporary folder && return its full path > > > > PathExists(sPath) > > Test whether path exists > > > > PathGetBase(sPath) > > Get base/root name of a file or folder > > > > PathGetCurrentDirectory() > > Get current directory of active process > > > > PathGetExtension(sPath) > > Get extention of file || folder > > > > PathGetFolder(sPath) > > Get the parent folder of a file or folder > > > > PathGetInternetCacheFolder() > > Get Windows folder for temporary Internet files > > > > PathGetLong(sPath) > > Get long name of file or folder > > > > PathGetName(sPath) > > Get the file or folder name at the end of a path > > > > PathGetShort(sPath) > > Get short path (8.3 style) of a file or folder > > > > PathGetSpec(sDir, sWildcards, sFlags) > > Get a list of paths, specifying folder, wild card pattern, && sort order > > > > PathGetTempFile() > > Get full path of a temporary file > > > > PathGetTempFolder() > > Get Windows folder for temporary files > > > > PathGetTempName() > > Get Name for temporary file || folder > > > > PathSetCurrentDirectory(sDir) > > Set current directory of active process, and return previously current > > directory > > ---------- > > > > Regular Expression Methods > > > > These search or extract strings based on regular expressions. > > > > RegExpContains(sText, sMatch, bIgnoreCase) > > Get Array containing the starting index and text of the first match of a > > regular expression > > > > RegExpContainsLast(sText, sMatch, bIgnoreCase) > > Get list containing the starting index and text of the last match of a > > regular expression > > > > RegExpCount(sText, sMatch, bIgnoreCase) > > Count matches of a regular expression > > > > RegExpExtract(sText, sMatch, bIgnoreCase) > > Get list containing matches of a regular expression > > > > RegExpReplace(sText, sMatch, sReplace, bIgnoreCase) > > Replace text matching a regular expression > > ---------- > > > > Registry Methods > > > > These read or write strings with the Windows registry (not yet debugged). > > > > RegistryGetString(iRootKey, sSubKey, sValueName) > > Get a string from registry > > > > RegistryRead(sKey) > > Get a string from the registry > > > > RegistrySetString(iRootKey, sSubKey, sValueName, sValueData) > > Set a registry string > > > > RegistryWrite(sKey, sValue) > > Write a string to the registry > > ---------- > > > > Shell Methods > > > > These execute programs or open files. > > > > ShellCreateShortcut(sFile, sTargetPath, sWorkingDirectory, iWindowStyle, > > sHotkey) > > Create a .lnk or .url file > > > > ShellExec(sCommand) > > Run a console mode command && return its standard output > > > > ShellExecute(sFile, sParams, sFolder, sVerb, iWindowStyle) > > Execute a command with a verb like RunAs > > > > ShellExpandEnvironmentVariables(sText) > > Replace environment variables with their values > > > > ShellGetEnvironmentVariable(sVariable) > > Get the value of an environment variable > > > > ShellGetShortcutTargetPath(sFile) > > Get the target path of a shortcut file > > > > ShellGetSpecialFolder(vFolder) > > Get a special Windows folder > > > > ShellInvokeVerb(sPath, sVerb) > > Invoke a verb on a file or folder > > > > ShellOpen(sPath) > > Open a file or folder with the default program associated with its type > > > > ShellOpenWith(sExe, sParam) > > Open a program with a file > > > > ShellRun(sFile, iStyle, bWait) > > Launch a program or file, indicating its window style && whether to wait > > before returning > > > > ShellRunCommandPrompt(sDir) > > Open a command prompt in the directory specified > > > > ShellRunExplorerWindow(sDir) > > Open Windows Explorer in the directory specified > > > > ShellWait(sPath) > > Run a program and wait for it to return > > ---------- > > > > String Methods > > > > These parse strings or save them to files. > > > > StringAppendToFile(sText, sFile, sDivider) > > Append string to File, omitting divider if the first one > > > > StringChopLeft(sText, iCount) > > Remove iCount characters from left of sText > > > > StringChopRight(sText, iCount) > > Remove iCount characters from Right of sText > > > > StringContains(sText, sMatch, bIgnoreCase) > > Test if a string is contained in another > > > > StringConvertToMacLineBreak(sText) > > Convert to Macintosh line break, \r > > > > StringConvertToUnixLineBreak(sText) > > Convert to Unix line break, \n > > > > StringConvertToWinLineBreak(sText) > > Convert to standard Windows line break, \r\n > > > > StringCount(sText, sMatch) > > Count occurrences of a string within another string > > > > StringEndsWith(sText, sSuffix, bIgnoreCase) > > Test whether first string ends with second one > > > > StringEqual(s1, s2) > > Test if two strings are exactly equal > > > > StringEquiv(s1, s2) > > Test whether two strings are the same except for capitalization > > > > StringGetASCII(sText) > > Get space delimited ASCII codes for characters in string > > > > StringLeft(sText, iCount) > > Return leftmost characters of a string > > > > StringLength(s) > > Return length of a string > > > > StringPlural(sItem, iCount) > > Return singular || plural form of a string, depending on whether count > > equals one > > > > StringQuote(sText) > > Quote a string > > > > StringReplaceAll(sText, sMatch, sReplace) > > Replace all occurences of a string within another > > > > StringRight(sText, iCount) > > Return rightmost characters of a string > > > > StringStartsWith(sText, sPrefix, bIgnoreCase) > > Test whether first string starts with second one > > > > StringToFile(sText, sFile) > > Saves string to text file, replacing if it exists > > > > StringTrim(sText) > > Trim white space from both ends of a string > > > > StringUnquote(sText) > > Unquote a string > > > > StringWrap(sText, iMaxLine) > > var aLines, aWords > > var i, j > > var sReturn, sLines, sLine, sWords, sWord > > aLines = sText.split(vbCrLf) > > sReturn = xMute > > var iCount = aLines.length > > for (var i = 0; i < iCount; i++) > > sLine = aLines[i] > > if (sLine.length > iMaxLine) > > aWords = sLine.split(' ') > > sLine = xMute > > for (var j = 0; j < aWords.length; j++) > > sWord = aWords(j) > > if (sLine.length + sWord.length > iMaxLine) > > sReturn += StringTrim(sLine) + vbCrLf > > sLine = sWord + ' ' > > } > > else > > sLine = sLine + sWord + ' ' > > } > > } > > } > > else > > sReturn += RTrim(sLine) + vbCrLf > > } > > } > > return sReturn > > } // StringWrap method > > ---------- > > > > Variant Data Methods > > > > These convert between variant and JScript data types. > > > > VtArrayToJs(a) > > Convert variant array to JScript > > > > VtArrayToList(a) > > Convert variant array to list > > > > VtCreateDictionary() > > Return a variant dictionary > > > > VtCreateFileSystemObject() > > Return a file system object > > > > VtCreateHtmlFile() > > Create a variant HTMLFile object > > > > VtCreateInternetExplorerApplication() > > Return an Internet Explorer object > > > > VtCreateList() > > Create a variant list object > > > > VtCreateRegExp() > > Return a scripting RegExp object > > > > VtCreateShellApplication() > > Return a Shell.Application object > > > > VtCreateStream() > > Return an ADODB.Stream object > > > > VtCreateVBScriptControl() > > Return MSScriptControl.ScriptControl object > > > > VtCreateWebRequest() > > Create web request object > > > > VtCreateWScriptShell() > > Return WScript.Shell object > > > > VtCreateXmlDocument() > > Return an XML document > > > > VtDateToJs(dt) > > Convert a variant date to JScript > > > > VtDictionaryToJs(d) > > Convert a variant dictionary to JScript > > > > VtDictionaryKeysToJs(d) > > Convert variant array of dictionary keys to JScript array > > > > VtDictionaryKeysToList(d) > > Convert variant array of dictionary keys to list > > > > VtEvalVBScript(sCode, dParams) > > Evaluate VBScript code and return the result > > > > VtEvalVBScriptParam(sCode, vParam) > > Evaluate VBScript code and return result, passing single argument > > > > VtGetWMIObject() > > Get WMI object > > > > VtInitDictionary(vValue) > > Create a variant dictionary and initialize it with a single key/value pair > > > > VtListToJs(l) > > Convert variant list to JScript array > > > > VtStreamToFile(aBytes, sFile) > > Save a variant byte array to a binary file > > > > VtTypeName(vVariant) > > Get variant subtype > > ---------- > > > > Web Request Methods > > > > These send GET or POST requests to web servers, retrieving strings or > > saving to files. > > > > WebRequest(sType, sUrl, dData, dHeaders, sUser, sPassword) > > Send a web request and return the response > > > > WebRequestGet(sUrl, dData, dHeaders, sUser, sPassword) > > Send a get request > > > > WebRequestGetToFile(sUrl, dData, dHeaders, sUser, sPassword, sFile) > > Send a get request and save response to file > > > > WebRequestGetToString(sUrl, dData, dHeaders, sUser, sPassword) > > Send a get request and return response as string > > > > WebRequestHead(sUrl, dData, dHeaders, sUser, sPassword) > > Send a head request > > > > WebRequestHeader(sUrl, sHeader) > > Get response header > > > > WebRequestPost(sUrl, dData, dHeaders, sUser, sPassword) > > Send a post request > > > > WebRequestPostToFile(sUrl, dData, dHeaders, sUser, sPassword, sFile) > > Send a post request and save response to file > > > > WebRequestPostToString(sUrl, dData, dHeaders, sUser, sPassword) > > Send a post request and return response as string > > > > WebRequestToFile(sType, sUrl, dData, dHeaders, sUser, sPassword, sFile) > > Save web resource to file > > > > WebRequestToString(sType, sUrl, dData, dHeaders, sUser, sPassword) > > Return web resource as string > > > > WebUrlContentType(sUrl) > > Get content type of a web resource > > > > WebUrlFileName(sUrl) > > Get suggested file name of a web resource > > > > WebUrlIsHtml() > > Test whether content type is text/html > > > > WebUrlToFile(sUrl, sFile) > > Save web resource to file > > > > WebUrlToString(sUrl) > > Return web resource as string > > ---------- > > > > XML Methods > > > > These read or write XML data, from memory or files. > > > > XmlAppendElement(oParent, sName, sValue) > > Append element to a node > > > > XmlCreateElement(oNode, sName, sValue) > > Create an XML element > > > > XmlCreateFile(sFile) > > Create a root XML file > > > > XmlEnsureGetNode(oDoc, sPath) > > Return a node, creating preceding elements if necessary > > > > XmlEnsureOpenFile(sFile) > > Open an XML file, creating it if necessary > > > > XmlGetAttribute(sFile, sPath, sAttribute, sDefault) > > Get an attribute of a node > > > > XmlGetNode(sFile, sPath) > > Get a node > > > > XmlGetNodeNames(sFile, sPath) > > Get node names > > > > XmlGetNodes(sFile, sPath) > > Get a node collection > > > > XmlGetValue(sFile, sPath, sDefault) > > Get a value of a node > > > > XmlOpenFile(sFile) > > Open an XML file > > > > XmlRemoveAttribute(sFile, sPath) > > Remove an attribute > > > > XmlRemoveNode(sFile, sPath) > > Remove a node > > > > XmlRemoveNodes(sFile, sPath) > > Remove a node collection > > > > XmlSetAttribute(sFile, sPath, sAttribute, sText) > > Set an attribute > > > > XmlSetValue(sFile, sPath, sValue) > > Set a value > > > > ---------- > > > > Development Notes > > > > Thanks go to Bryan Garaventa for information on the MSXml2.XMLHTTP object, > > and to Martin Slack for information on the System.Collections.ArrayList > > object. > > > > > > > > > > > > >
