Created
September 20, 2012 20:00
-
-
Save kubrick06010/3758008 to your computer and use it in GitHub Desktop.
twitter for windows cmd
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <job> | |
| <script language="vbscript"> | |
| ' Twitter bot with OAuth in WSH | |
| ' for Windows and windows scripting host | |
| ' tweets with OAuth | |
| ' | |
| ' All thanks to: http://scottdesapio.com/VBScriptOAuth/ and http://classicaspreference.com/aspexamples/classic_asp_for_twitter_desapio.asp | |
| ' pasted together by piskec, 2010, http://www.krtina.com/blog | |
| ' ******************************** | |
| ' USAGE: | |
| ' TweetWSH.wsf <message to tweet> | |
| ' | |
| ' CONFIGURATION: | |
| ' Go to: | |
| ' http://dev.twitter.com/apps/New | |
| ' Log in with the twitter account that you intend to have send the tweets. | |
| ' Enter the application name and details | |
| ' Set | |
| ' Application Type to "Client" | |
| ' Default Access Type to "Read & Write" | |
| ' Click "Save Application" | |
| ' Copy your | |
| ' Consumer key (same as API key) | |
| ' Consumer secret | |
| ' Click "My Access Token" button | |
| ' Copy your | |
| ' Access Token (oauth_token) | |
| ' Access Token Secret (oauth_token_secret) | |
| ' *** CHANGE BELOW | |
| Const TWITTER_SCREEN_NAME = "" | |
| Const myConsumerKey = "" | |
| Const myConsumerSecret = "" | |
| Const myAccessToken = "" | |
| Const myAccessSecret = "" | |
| Const myDebug = false | |
| '******************************************************************************* | |
| ' *** CHANGE NOTHING! | |
| Const TWITTER_OAUTH_URL_ACCESS = "http://twitter.com/oauth/access_token" | |
| Const TWITTER_OAUTH_URL_AUTHENTICATE = "http://twitter.com/oauth/authenticate" | |
| Const TWITTER_OAUTH_URL_REQUEST_TOKEN = "http://twitter.com/oauth/request_token" | |
| Const TWITTER_OAUTH_URL_UPDATE_STATUS = "http://twitter.com/statuses/update.json" | |
| '****************************************************************************** | |
| ' ERROR CODE CONSTANTS (do NOT change) | |
| '****************************************************************************** | |
| Const OAUTH_ERROR_TIMEOUT = "-2147012894" | |
| '****************************************************************************** | |
| ' TIMEOUT CONSTANTS (change to suite) | |
| '****************************************************************************** | |
| Const OAUTH_TIMEOUT_RESOLVE = 2500 | |
| Const OAUTH_TIMEOUT_CONNECT = 10000 | |
| Const OAUTH_TIMEOUT_SEND = 10000 | |
| Const OAUTH_TIMEOUT_RECEIVE = 10000 | |
| '****************************************************************************** | |
| ' PARAM CONSTANTS (do NOT change) | |
| '****************************************************************************** | |
| Const OAUTH_TOKEN_REQUEST = "oauth_token_request" | |
| Const OAUTH_TOKEN = "oauth_token" | |
| Const OAUTH_TOKEN_SECRET = "oauth_token_secret" | |
| Const OAUTH_VERIFIER = "oauth_verifier" | |
| '****************************************************************************** | |
| ' MISC CONSTANTS (do NOT change) | |
| '****************************************************************************** | |
| Const OAUTH_UNRESERVED = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~" | |
| Const OAUTH_REQUEST_METHOD_GET = "GET" | |
| Const OAUTH_REQUEST_METHOD_POST = "POST" | |
| Const OAUTH_SIGNATURE_METHOD = "HMAC-SHA1" | |
| Const OAUTH_VERSION = "1.0" 'editable? | |
| '*?*? | |
| '****************************************************************************** | |
| ' CLASS: cLibOAuth | |
| ' PURPOSE: | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: 04.04.10 | |
| '****************************************************************************** | |
| Class cLibOAuth | |
| '************************************************************************** | |
| '***'PRIVATE CLASS MEMBERS | |
| '************************************************************************** | |
| ' boolean indicating the users current logged in state. This state | |
| ' variable is EXCLUSIVE to the session state of the local application | |
| ' and NOT the oAuth provider's logged in state. | |
| Private m_blnLoggedIn | |
| ' additional parameters exclusive to the current call | |
| Private m_objParameters | |
| ' reference to the utilities class (Eccoding, response extraction, | |
| ' dictionary sorting, etc.) | |
| Private m_objUtils | |
| ' reference to the consumer key acquired after registering with the | |
| ' oAuth service provider | |
| Private m_strConsumerKey | |
| ' reference to the consumer secret acquired after registering with the | |
| ' oAuth service provider | |
| Private m_strConsumerSecret | |
| ' the request URL | |
| Private m_strEndPoint | |
| ' used to globally identify process errors | |
| Private m_strErrorCode | |
| ' the request type - e.g. POST, GET | |
| Private m_strRequestMethod | |
| ' the response string returned by the service provider | |
| Private m_strResponseText | |
| ' where to forward the user if call to oAuth provider times out. | |
| ' Absolute URL is recommended | |
| Private m_strTimeoutURL | |
| '************************************************************************** | |
| '***'CLASS_INITIALIZE / CLASS_TERMINATE | |
| '************************************************************************** | |
| Private Sub Class_Initialize() | |
| ' set default value to Null se we can check for null before get/set | |
| m_blnLoggedIn = Null | |
| ' set default value to Nothing so we can check "If ... Is Nothing" | |
| Set m_objParameters = Nothing | |
| ' instantiate the Utils class | |
| Set m_objUtils = New cLibOAuthUtils | |
| ' set default to Null to ensure we're returning a verifiable value | |
| m_strErrorCode = Null | |
| ' set default to POST | |
| m_strRequestMethod = OAUTH_REQUEST_METHOD_POST | |
| End Sub | |
| Private Sub Class_Terminate() | |
| ' kill obj erfs | |
| Set m_objUtils = Nothing | |
| Set m_objParameters = Nothing | |
| End Sub | |
| '************************************************************************** | |
| '***'PUBLIC PROPERTIES | |
| '************************************************************************** | |
| Public Property Let ConsumerKey(pData) | |
| m_strConsumerKey = pData | |
| End Property | |
| Public Property Let ConsumerSecret(pData) | |
| m_strConsumerSecret = pData | |
| End Property | |
| Public Property Let EndPoint(pData) | |
| m_strEndPoint = pData | |
| End Property | |
| Public Property Get ErrorCode | |
| ErrorCode = m_strErrorCode | |
| End Property | |
| Public Property Get LoggedIn | |
| If IsNull(m_blnLoggedIn) Then | |
| Call Get_LoggedIn() | |
| End If | |
| LoggedIn = m_blnLoggedIn | |
| End Property | |
| Public Property Get Parameters | |
| If m_objParameters Is Nothing Then | |
| Set m_objParameters = Wscript.CreateObject("Scripting.Dictionary") | |
| End If | |
| Set Parameters = m_objParameters | |
| End Property | |
| Public Property Let RequestMethod(pData) | |
| m_strRequestMethod = pData | |
| End Property | |
| Public Property Get ResponseText | |
| ResponseText = m_strResponseText | |
| End Property | |
| Public Property Let TimeoutURL(pData) | |
| m_strTimeoutURL = pData | |
| End Property | |
| '************************************************************************** | |
| '***'PUBLIC FUNCTIONS | |
| '************************************************************************** | |
| '************************************************************************** | |
| ' SUB: Send() | |
| ' PARAMETERS: | |
| ' PURPOSE: | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: | |
| '************************************************************************** | |
| Public Sub Send() | |
| ' build Request URL | |
| Dim strRequestURL : strRequestURL = Get_RequestURL() | |
| ' make the call | |
| On Error Resume Next | |
| Dim objXMLHTTP : Set objXMLHTTP = Wscript.CreateObject("Msxml2.ServerXMLHTTP.6.0") | |
| objXMLHTTP.setTimeouts OAUTH_TIMEOUT_RESOLVE, OAUTH_TIMEOUT_CONNECT, OAUTH_TIMEOUT_SEND, OAUTH_TIMEOUT_RECEIVE | |
| objXMLHTTP.Open m_strRequestMethod, strRequestURL, False | |
| objXMLHTTP.SetRequestHeader "Content-Type","application/x-www-form-urlencoded" | |
| objXMLHTTP.Send() | |
| ' check for errors | |
| If Err.Number <> 0 Then | |
| Select Case CStr(Err.Number) | |
| Case CStr(OAUTH_ERROR_TIMEOUT) | |
| Response.Redirect m_strTimeoutURL | |
| Response.End | |
| Case Else | |
| m_strErrorCode = Err.Number | |
| End Select | |
| IF myDebug Then MsgBox "#2 Error sending " & Err.Description | |
| Else | |
| m_strResponseText = objXMLHTTP.ResponseText | |
| IF myDebug Then MsgBox "#1 Sent it" | |
| End If | |
| Set objXMLHTTP = Nothing | |
| On Error Goto 0 | |
| End Sub | |
| '************************************************************************** | |
| ' FUNCTION: Get_ResponseValue() | |
| ' PARAMETERS: strParamName | |
| ' PURPOSE: Returns a value ripped from service provider response | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: 04.04.10 | |
| '************************************************************************** | |
| Public Function Get_ResponseValue(strParamName) | |
| Get_ResponseValue = m_objUtils.Get_ResponseValue(m_strResponseText, strParamName) | |
| End Function | |
| '************************************************************************** | |
| '***'PRIVATE FUNCTIONS | |
| '************************************************************************** | |
| '************************************************************************** | |
| ' SUB: Get_LoggedIn | |
| ' PARAMETERS: | |
| ' PURPOSE: | |
| ' | |
| ' AUTHOR: sjd DATE: LAST MODIFIED: | |
| '************************************************************************** | |
| Private Sub Get_LoggedIn() | |
| On Error Resume Next | |
| 'If Session(OAUTH_TOKEN) <> "" And Session(OAUTH_TOKEN_SECRET) <> "" Then | |
| ' m_blnLoggedIn = True | |
| 'Else | |
| ' m_blnLoggedIn = False | |
| 'End If | |
| If Err.Number <> 0 Then | |
| m_blnLoggedIn = Null | |
| End If | |
| On Error Goto 0 | |
| End Sub | |
| '************************************************************************** | |
| ' FUNCTION: Get_RequestURL | |
| ' PARAMETERS: | |
| ' PURPOSE: | |
| ' | |
| ' AUTHOR: sjd DATE: LAST MODIFIED: | |
| '************************************************************************** | |
| Private Function Get_Parameters() | |
| Dim objQS : Set objQS = New cLibOAuthQS | |
| ' add proprieatary param set | |
| If Not m_objParameters Is Nothing Then | |
| Dim Item : For Each Item In m_objParameters | |
| objQS.Add Item, m_objParameters.Item(Item) | |
| Next | |
| End If | |
| ' add required standard param set | |
| objQS.Add "oauth_consumer_key", m_strConsumerKey | |
| objQS.Add "oauth_nonce", m_objUtils.Nonce | |
| objQS.Add "oauth_signature_method", OAUTH_SIGNATURE_METHOD | |
| objQS.Add "oauth_timestamp", m_objUtils.TimeStamp | |
| objQS.Add "oauth_version", OAUTH_VERSION | |
| Get_Parameters = objQS.Get_Parameters() | |
| Set objQS = Nothing | |
| End Function | |
| '************************************************************************** | |
| ' FUNCTION: Get_RequestURL | |
| ' PARAMETERS: strParameters | |
| ' PURPOSE: Returns a fully formatted request URL | |
| ' | |
| ' AUTHOR: sjd DATE: LAST MODIFIED: | |
| '************************************************************************** | |
| Private Function Get_RequestURL() | |
| Dim strParameters : strParameters = Get_Parameters() | |
| Dim objRequestURL : Set objRequestURL = New cLibOAuthRequestURL | |
| objRequestURL.ConsumerSecret = m_strConsumerSecret | |
| objRequestURL.EndPoint = m_strEndPoint | |
| objRequestURL.Method = m_strRequestMethod | |
| objRequestURL.Parameters = strParameters | |
| Get_RequestURL = objRequestURL.Get_RequestURL() | |
| Set objRequestURL = Nothing | |
| End Function | |
| End Class | |
| '*?*? | |
| '****************************************************************************** | |
| ' CLASS: cLibOAuthQS | |
| ' PURPOSE: | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: 04.04.10 | |
| '****************************************************************************** | |
| Class cLibOAuthQS | |
| '************************************************************************** | |
| '***'PRIVATE CLASS MEMBERS | |
| '************************************************************************** | |
| Private m_objDictionary | |
| Private m_objUtils | |
| Private m_strSorted | |
| '************************************************************************** | |
| '***'CLASS_INITIALIZE / CLASS_TERMINATE | |
| '************************************************************************** | |
| Private Sub Class_Initialize() | |
| Set m_objDictionary = Nothing | |
| Set m_objUtils = Nothing | |
| m_strSorted = Null | |
| End Sub | |
| Private Sub Class_Terminate() | |
| Set m_objUtils = Nothing | |
| Set m_objDictionary = Nothing | |
| End Sub | |
| '************************************************************************** | |
| '***'PUBLIC PROPERTIES | |
| '************************************************************************** | |
| '************************************************************************** | |
| '***'PRIVATE PROPERTIES | |
| '************************************************************************** | |
| Private Property Get Dictionary | |
| If m_objDictionary Is Nothing Then | |
| Set m_objDictionary = Wscript.CreateObject("Scripting.Dictionary") | |
| End If | |
| Set Dictionary = m_objDictionary | |
| End Property | |
| Private Property Get Sorted | |
| If IsNull(m_strSorted) Then | |
| Call Get_Sorted() | |
| End If | |
| Sorted = m_strSorted | |
| End Property | |
| Private Property Get Utils | |
| If m_objUtils Is Nothing Then | |
| Set m_objUtils = New cLibOAuthUtils | |
| End If | |
| Set Utils = m_objUtils | |
| End Property | |
| '************************************************************************** | |
| '***'PUBLIC FUNCTIONS | |
| '************************************************************************** | |
| '************************************************************************** | |
| ' SUB: Add | |
| ' PARAMETERS: | |
| ' PURPOSE: | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: 04.04.10 | |
| '************************************************************************** | |
| Public Sub Add(strKey, strValue) | |
| Dictionary.Add strKey, Utils.URLEncode(strValue) | |
| End Sub | |
| '************************************************************************** | |
| ' SUB: Get_Parameters | |
| ' PARAMETERS: | |
| ' PURPOSE: | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: 04.04.10 | |
| '************************************************************************** | |
| Public Function Get_Parameters() | |
| Get_Parameters = Sorted | |
| End Function | |
| '************************************************************************** | |
| '***'PRIVATE FUNCTIONS | |
| '************************************************************************** | |
| '************************************************************************** | |
| ' SUB: Get_Sorted | |
| ' PARAMETERS: | |
| ' PURPOSE: | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: 04.04.10 | |
| '************************************************************************** | |
| Private Sub Get_Sorted() | |
| Dim intCount : intCount = Dictionary.Count | |
| Dim i : i = 1 | |
| m_strSorted = "" | |
| Call Utils.SortDictionary(Dictionary, 1) | |
| Dim Item : For Each Item In Dictionary | |
| m_strSorted = m_strSorted & Item & "=" & Dictionary.Item(Item) | |
| If i < intCount Then | |
| m_strSorted = m_strSorted & "&" | |
| End If | |
| i = i + 1 | |
| Next | |
| End Sub | |
| End Class | |
| '****************************************************************************** | |
| ' CLASS: cLibOAuthRequestURL | |
| ' PURPOSE: | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: 04.04.10 | |
| '****************************************************************************** | |
| Class cLibOAuthRequestURL | |
| '************************************************************************** | |
| '***'PRIVATE CLASS MEMBERS | |
| '************************************************************************** | |
| Private m_objUtils | |
| Private m_strConsumerSecret | |
| Private m_strEndPoint | |
| Private m_strMethod | |
| Private m_strParameters | |
| Private m_strTokenSecret | |
| '************************************************************************** | |
| '***'CLASS_INITIALIZE / CLASS_TERMINATE | |
| '************************************************************************** | |
| Private Sub Class_Initialize() | |
| Set m_objUtils = Nothing | |
| m_strTokenSecret = "" | |
| End Sub | |
| Private Sub Class_Terminate() | |
| Set m_objUtils = Nothing | |
| End Sub | |
| '************************************************************************** | |
| '***'PUBLIC PROPERTIES | |
| '************************************************************************** | |
| Public Property Let ConsumerSecret(pData) | |
| m_strConsumerSecret = pData | |
| End Property | |
| Public Property Let EndPoint(pData) | |
| m_strEndPoint = pData | |
| End Property | |
| Public Property Let Method(pData) | |
| m_strMethod = pData | |
| End Property | |
| Public Property Let Parameters(pData) | |
| m_strParameters = pData | |
| End Property | |
| Public Property Let TokenSecret(pData) | |
| m_strTokenSecret = pData | |
| End Property | |
| '************************************************************************** | |
| '***'PRIVATE PROPERTIES | |
| '************************************************************************** | |
| Private Property Get Utils | |
| If m_objUtils Is Nothing Then | |
| Set m_objUtils = New cLibOAuthUtils | |
| End If | |
| Set Utils = m_objUtils | |
| End Property | |
| '************************************************************************** | |
| '***'PUBLIC FUNCTIONS | |
| '************************************************************************** | |
| '************************************************************************** | |
| ' FUNCTION: Get_RequestURL | |
| ' PARAMETERS: | |
| ' PURPOSE: | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: 04.04.10 | |
| '************************************************************************** | |
| Public Function Get_RequestURL() | |
| Dim strSignature : strSignature = Get_Signature() | |
| strSignature = Utils.URLEncode(strSignature) | |
| Get_RequestURL = _ | |
| m_strEndPoint & "?" & _ | |
| m_strParameters & "&" & _ | |
| "oauth_signature=" & strSignature | |
| End Function | |
| '************************************************************************** | |
| '***'PRIVATE FUNCTIONS | |
| '************************************************************************** | |
| '************************************************************************** | |
| ' FUNCTION: Get_Signature | |
| ' PARAMETERS: | |
| ' PURPOSE: | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: 04.04.10 | |
| '************************************************************************** | |
| Private Function Get_Signature() | |
| Dim strBaseSignature : strBaseSignature = _ | |
| m_strMethod & "&" & _ | |
| Utils.URLEncode(m_strEndPoint) & "&" & _ | |
| Utils.URLEncode(m_strParameters) | |
| '>>SECRET ! ConsumerSecret & AccessTokenSecret | |
| Dim strSecret : strSecret = myConsumerSecret & "&" & myAccessSecret | |
| Get_Signature = b64_hmac_sha1(strSecret, strBaseSignature) | |
| End Function | |
| End Class | |
| '****************************************************************************** | |
| ' CLASS: cLibOAuthUtils | |
| ' PURPOSE: | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: 04.04.10 | |
| '****************************************************************************** | |
| Class cLibOAuthUtils | |
| '************************************************************************** | |
| '***'PRIVATE CLASS MEMBERS | |
| '************************************************************************** | |
| Private m_intOffsetMinutes | |
| Private m_intTimeStamp | |
| Private m_strNonce | |
| '************************************************************************** | |
| '***'CLASS_INITIALIZE / CLASS_TERMINATE | |
| '************************************************************************** | |
| Private Sub Class_Initialize() | |
| m_intOffsetMinutes = Null | |
| m_intTimeStamp = Null | |
| m_strNonce = Null | |
| End Sub | |
| Private Sub Class_Terminate() | |
| End Sub | |
| '************************************************************************** | |
| '***'PUBLIC PROPERTIES | |
| '************************************************************************** | |
| Public Property Get OffsetMinutes | |
| If IsNull(m_intOffsetMinutes) Then | |
| Set_OffsetMinutes() | |
| End If | |
| OffsetMinutes = m_intOffsetMinutes | |
| End Property | |
| Public Property Get Nonce | |
| If IsNull(m_strNonce) Then | |
| Set_Nonce() | |
| End If | |
| Nonce = m_strNonce | |
| End Property | |
| Public Property Get TimeStamp | |
| If IsNull(m_intTimeStamp) Then | |
| Set_Timestamp() | |
| End If | |
| TimeStamp = m_intTimeStamp | |
| End Property | |
| '************************************************************************** | |
| '***'PUBLIC FUNCTIONS | |
| '************************************************************************** | |
| '************************************************************************** | |
| ' FUNCTION: Get_ResponseValue | |
| ' PARAMETERS: strResponseText, strKey | |
| ' PURPOSE: Rips out a specific key/value pair from the service | |
| ' provider response and returns the value | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: 04.04.10 | |
| '************************************************************************** | |
| Public Function Get_ResponseValue(strResponseText, strKey) | |
| Dim arrPair, arrPairs : arrPairs = Split(strResponseText, "&") | |
| Dim strRetVal : strRetVal = Null | |
| Dim i : i = 0 : Do While i < UBound(arrPairs) + 1 | |
| arrPair = arrPairs(i) | |
| arrPair = Split(arrPair, "=") | |
| If arrPair(0) = strKey Then | |
| strRetVal = arrPair(1) | |
| Exit Do | |
| End If | |
| i = i + 1 | |
| Loop | |
| Get_ResponseValue = strRetVal | |
| End Function | |
| '************************************************************************** | |
| ' SUB: SortDictionary | |
| ' PARAMETERS: objDict (collection), intSort (type) | |
| ' PURPOSE: Sorts a dictionary on key or item. | |
| ' REF: http://support.microsoft.com/kb/246067 | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: 04.04.10 | |
| '************************************************************************** | |
| Public Sub SortDictionary(objDict, intSort) | |
| Const dictKey = 1 | |
| Const dictItem = 2 | |
| ' declare our variables | |
| Dim strDict() | |
| Dim objKey | |
| Dim strKey,strItem | |
| Dim X,Y,Z | |
| ' get the dictionary count | |
| Z = objDict.Count | |
| ' we need more than one item to warrant sorting | |
| If Z > 1 Then | |
| ' create an array to store dictionary information | |
| ReDim strDict(Z,2) | |
| X = 0 | |
| ' populate the string array | |
| For Each objKey In objDict | |
| strDict(X,dictKey) = CStr(objKey) | |
| strDict(X,dictItem) = CStr(objDict(objKey)) | |
| X = X + 1 | |
| Next | |
| ' perform a a shell sort of the string array | |
| For X = 0 to (Z - 2) | |
| For Y = X to (Z - 1) | |
| If StrComp(strDict(X,intSort),strDict(Y,intSort),vbTextCompare) > 0 Then | |
| strKey = strDict(X,dictKey) | |
| strItem = strDict(X,dictItem) | |
| strDict(X,dictKey) = strDict(Y,dictKey) | |
| strDict(X,dictItem) = strDict(Y,dictItem) | |
| strDict(Y,dictKey) = strKey | |
| strDict(Y,dictItem) = strItem | |
| End If | |
| Next | |
| Next | |
| ' erase the contents of the dictionary object | |
| objDict.RemoveAll | |
| ' repopulate the dictionary with the sorted information | |
| For X = 0 to (Z - 1) | |
| objDict.Add strDict(X,dictKey), strDict(X,dictItem) | |
| Next | |
| End If | |
| End Sub | |
| '************************************************************************** | |
| ' FUNCTION: URLEncode | |
| ' PARAMETERS: s (string) | |
| ' PURPOSE: URL Encodes only those characters required by the oAuth | |
| ' standard because native Server.URLEncode encodes too | |
| ' much causing call to fail. | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: 04.04.10 | |
| '************************************************************************** | |
| Public Function URLEncode(s) | |
| Dim strTmpVal : strTmpVal = s | |
| Dim strRetVal : strRetVal = "" | |
| Dim intAsc : intAsc = 0 | |
| Dim strHex : strHex = "" | |
| Dim i, strChr : For i = 1 To Len(strTmpVal) | |
| strChr = Mid(strTmpVal, i, 1) | |
| If InStr(1, OAUTH_UNRESERVED, strChr) = 0 Then | |
| intAsc = Asc(strChr) | |
| If intAsc < 32 Or intAsc > 126 Then | |
| strHex = encodeURIComponent(strChr) | |
| Else | |
| strHex = "%" & Hex(intAsc) | |
| End If | |
| strRetVal = strRetVal & strHex | |
| Else | |
| strRetVal = strRetVal & strChr | |
| End If | |
| Next | |
| URLEncode = strRetVal | |
| End Function | |
| '************************************************************************** | |
| '***'PRIVATE FUNCTIONS | |
| '************************************************************************** | |
| '************************************************************************** | |
| ' SUB: Set_OffsetMinutes() | |
| ' PARAMETERS: | |
| ' PURPOSE: Pull out GMT Offset Minutes from registry | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: 04.04.10 | |
| '************************************************************************** | |
| Private Sub Set_OffsetMinutes() | |
| Dim objWshShell : Set objWshShell = Wscript.CreateObject("WScript.Shell") | |
| m_intOffsetMinutes = objWshShell.RegRead("HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation\ActiveTimeBias") | |
| Set objWshShell = Nothing | |
| End Sub | |
| '************************************************************************** | |
| ' SUB: Set_Nonce() | |
| ' PARAMETERS: | |
| ' PURPOSE: Returns string based on timestamp to be used as "random" | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: | |
| '************************************************************************** | |
| Private Sub Set_Nonce() | |
| m_strNonce = Me.TimeStamp + (Timer() * 1000) | |
| End Sub | |
| '************************************************************************** | |
| ' SUB: Set_Timestamp() | |
| ' PARAMETERS: | |
| ' PURPOSE: Returns numnber of seconds from UNIX Epoch Time | |
| ' January 1, 1970 00:00:00 GMT | |
| ' | |
| ' AUTHOR: sdesapio DATE: 04.04.10 LAST MODIFIED: | |
| '************************************************************************** | |
| Private Sub Set_Timestamp() | |
| Dim dteFrom : dteFrom = "01/01/1970 00:00:00 AM" | |
| Dim dteNow : dteNow = Now() | |
| dteNow = DateAdd("n", Me.OffsetMinutes, dteNow) | |
| m_intTimeStamp = DateDiff("s", dteFrom, dteNow) | |
| End Sub | |
| End Class | |
| Function EncodeCSZ(noter) | |
| noter=Replace(noter,"ž","%c5%be") | |
| noter=Replace(noter,"Ž","%c5%bd") | |
| noter=Replace(noter,"š","%c5%a1") | |
| noter=Replace(noter,"Š","%c5%a0") | |
| noter=Replace(noter,"è","%c4%8d") | |
| noter=Replace(noter,"È","%c4%8c") | |
| noter=Replace(noter,"ð","%c4%91") | |
| noter=Replace(noter,"Ð","%c4%90") | |
| noter=Replace(noter,"æ","%c4%87") | |
| noter=Replace(noter,"Æ","%c4%86") | |
| noter=Replace(noter,"°","%c2%b0") | |
| EncodeCSZ=noter | |
| End Function | |
| 'Base64 encode/decode functions were downloaded from http://www.motobit.com/tips/detpg_Base64/ | |
| Function Base64_Encode(inData) | |
| Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" | |
| Dim cOut, sOut, I | |
| For I = 1 To Len(inData) Step 3 | |
| Dim nGroup, pOut, sGroup | |
| nGroup = &H10000 * Asc(Mid(inData, I, 1)) + _ | |
| &H100 * MyASC(Mid(inData, I + 1, 1)) + MyASC(Mid(inData, I + 2, 1)) | |
| nGroup = Oct(nGroup) | |
| nGroup = String(8 - Len(nGroup), "0") & nGroup | |
| pOut = Mid(Base64, CLng("&o" & Mid(nGroup, 1, 2)) + 1, 1) + _ | |
| Mid(Base64, CLng("&o" & Mid(nGroup, 3, 2)) + 1, 1) + _ | |
| Mid(Base64, CLng("&o" & Mid(nGroup, 5, 2)) + 1, 1) + _ | |
| Mid(Base64, CLng("&o" & Mid(nGroup, 7, 2)) + 1, 1) | |
| sOut = sOut + pOut | |
| Next | |
| Select Case Len(inData) Mod 3 | |
| Case 1: | |
| sOut = Left(sOut, Len(sOut) - 2) + "==" | |
| Case 2: | |
| sOut = Left(sOut, Len(sOut) - 1) + "=" | |
| End Select | |
| Base64_Encode = sOut | |
| End Function | |
| Function MyASC(OneChar) | |
| If OneChar = "" Then MyASC = 0 Else MyASC = Asc(OneChar) | |
| End Function | |
| Function Base64_Decode(ByVal base64String) | |
| Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" | |
| Dim dataLength, sOut, groupBegin | |
| base64String = Replace(base64String, vbCrLf, "") | |
| base64String = Replace(base64String, vbTab, "") | |
| base64String = Replace(base64String, " ", "") | |
| dataLength = Len(base64String) | |
| If dataLength Mod 4 <> 0 Then | |
| Err.Raise 1, "Base64Decode", "Bad Base64 string." | |
| Exit Function | |
| End If | |
| For groupBegin = 1 To dataLength Step 4 | |
| Dim numDataBytes, CharCounter, thisChar, thisData, nGroup, pOut | |
| numDataBytes = 3 | |
| nGroup = 0 | |
| For CharCounter = 0 To 3 | |
| thisChar = Mid(base64String, groupBegin + CharCounter, 1) | |
| If thisChar = "=" Then | |
| numDataBytes = numDataBytes - 1 | |
| thisData = 0 | |
| Else | |
| thisData = InStr(1, Base64, thisChar, vbBinaryCompare) - 1 | |
| End If | |
| If thisData = -1 Then | |
| Err.Raise 2, "Base64Decode", "Bad character In Base64 string." | |
| Exit Function | |
| End If | |
| nGroup = 64 * nGroup + thisData | |
| Next | |
| nGroup = Hex(nGroup) | |
| nGroup = String(6 - Len(nGroup), "0") & nGroup | |
| pOut = Chr(CByte("&H" & Mid(nGroup, 1, 2))) + _ | |
| Chr(CByte("&H" & Mid(nGroup, 3, 2))) + _ | |
| Chr(CByte("&H" & Mid(nGroup, 5, 2))) | |
| sOut = sOut & Left(pOut, numDataBytes) | |
| Next | |
| Base64_Decode = sOut | |
| End Function | |
| '************************************************************** | |
| '************************************************************** | |
| '************************************************************** | |
| '************************************************************** | |
| '************************************************************** | |
| '************************************************************** | |
| '************************************************************** | |
| </script> | |
| <script language="javascript"> | |
| /* | |
| * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined | |
| * in FIPS PUB 180-1 | |
| * Version 2.1a Copyright Paul Johnston 2000 - 2002. | |
| * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet | |
| * Distributed under the BSD License | |
| * See http://pajhome.org.uk/crypt/md5 for details. | |
| */ | |
| /* | |
| * Configurable variables. You may need to tweak these to be compatible with | |
| * the server-side, but the defaults work in most cases. | |
| */ | |
| var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ | |
| var b64pad = "="; /* base-64 pad character. "=" for strict RFC compliance */ | |
| var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */ | |
| /* | |
| * These are the functions you'll usually want to call | |
| * They take string arguments and return either hex or base-64 encoded strings | |
| */ | |
| function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));} | |
| function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));} | |
| function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));} | |
| function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));} | |
| function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));} | |
| function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));} | |
| /* | |
| * Perform a simple self-test to see if the VM is working | |
| */ | |
| function sha1_vm_test() | |
| { | |
| return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d"; | |
| } | |
| /* | |
| * Calculate the SHA-1 of an array of big-endian words, and a bit length | |
| */ | |
| function core_sha1(x, len) | |
| { | |
| /* append padding */ | |
| x[len >> 5] |= 0x80 << (24 - len % 32); | |
| x[((len + 64 >> 9) << 4) + 15] = len; | |
| var w = Array(80); | |
| var a = 1732584193; | |
| var b = -271733879; | |
| var c = -1732584194; | |
| var d = 271733878; | |
| var e = -1009589776; | |
| for(var i = 0; i < x.length; i += 16) | |
| { | |
| var olda = a; | |
| var oldb = b; | |
| var oldc = c; | |
| var oldd = d; | |
| var olde = e; | |
| for(var j = 0; j < 80; j++) | |
| { | |
| if(j < 16) w[j] = x[i + j]; | |
| else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1); | |
| var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), | |
| safe_add(safe_add(e, w[j]), sha1_kt(j))); | |
| e = d; | |
| d = c; | |
| c = rol(b, 30); | |
| b = a; | |
| a = t; | |
| } | |
| a = safe_add(a, olda); | |
| b = safe_add(b, oldb); | |
| c = safe_add(c, oldc); | |
| d = safe_add(d, oldd); | |
| e = safe_add(e, olde); | |
| } | |
| return Array(a, b, c, d, e); | |
| } | |
| /* | |
| * Perform the appropriate triplet combination function for the current | |
| * iteration | |
| */ | |
| function sha1_ft(t, b, c, d) | |
| { | |
| if(t < 20) return (b & c) | ((~b) & d); | |
| if(t < 40) return b ^ c ^ d; | |
| if(t < 60) return (b & c) | (b & d) | (c & d); | |
| return b ^ c ^ d; | |
| } | |
| /* | |
| * Determine the appropriate additive constant for the current iteration | |
| */ | |
| function sha1_kt(t) | |
| { | |
| return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : | |
| (t < 60) ? -1894007588 : -899497514; | |
| } | |
| /* | |
| * Calculate the HMAC-SHA1 of a key and some data | |
| */ | |
| function core_hmac_sha1(key, data) | |
| { | |
| var bkey = str2binb(key); | |
| if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz); | |
| var ipad = Array(16), opad = Array(16); | |
| for(var i = 0; i < 16; i++) | |
| { | |
| ipad[i] = bkey[i] ^ 0x36363636; | |
| opad[i] = bkey[i] ^ 0x5C5C5C5C; | |
| } | |
| var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz); | |
| return core_sha1(opad.concat(hash), 512 + 160); | |
| } | |
| /* | |
| * Add integers, wrapping at 2^32. This uses 16-bit operations internally | |
| * to work around bugs in some JS interpreters. | |
| */ | |
| function safe_add(x, y) | |
| { | |
| var lsw = (x & 0xFFFF) + (y & 0xFFFF); | |
| var msw = (x >> 16) + (y >> 16) + (lsw >> 16); | |
| return (msw << 16) | (lsw & 0xFFFF); | |
| } | |
| /* | |
| * Bitwise rotate a 32-bit number to the left. | |
| */ | |
| function rol(num, cnt) | |
| { | |
| return (num << cnt) | (num >>> (32 - cnt)); | |
| } | |
| /* | |
| * Convert an 8-bit or 16-bit string to an array of big-endian words | |
| * In 8-bit function, characters >255 have their hi-byte silently ignored. | |
| */ | |
| function str2binb(str) | |
| { | |
| var bin = Array(); | |
| var mask = (1 << chrsz) - 1; | |
| for(var i = 0; i < str.length * chrsz; i += chrsz) | |
| bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32); | |
| return bin; | |
| } | |
| /* | |
| * Convert an array of big-endian words to a string | |
| */ | |
| function binb2str(bin) | |
| { | |
| var str = ""; | |
| var mask = (1 << chrsz) - 1; | |
| for(var i = 0; i < bin.length * 32; i += chrsz) | |
| str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask); | |
| return str; | |
| } | |
| /* | |
| * Convert an array of big-endian words to a hex string. | |
| */ | |
| function binb2hex(binarray) | |
| { | |
| var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; | |
| var str = ""; | |
| for(var i = 0; i < binarray.length * 4; i++) | |
| { | |
| str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) + | |
| hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF); | |
| } | |
| return str; | |
| } | |
| /* | |
| * Convert an array of big-endian words to a base-64 string | |
| */ | |
| function binb2b64(binarray) | |
| { | |
| var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; | |
| var str = ""; | |
| for(var i = 0; i < binarray.length * 4; i += 3) | |
| { | |
| var triplet = (((binarray[i >> 2] >> 8 * (3 - i %4)) & 0xFF) << 16) | |
| | (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 ) | |
| | ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF); | |
| for(var j = 0; j < 4; j++) | |
| { | |
| if(i * 8 + j * 6 > binarray.length * 32) str += b64pad; | |
| else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); | |
| } | |
| } | |
| return str; | |
| } | |
| </script> | |
| <script language="vbscript"> | |
| '************************************************************** | |
| '************************************************************** | |
| '************************************************************** | |
| '************************************************************** | |
| '************************************************************** | |
| '************************************************************** | |
| '************************************************************** | |
| Function GetCommandLineString () | |
| ' Get message from command line | |
| Dim pcount, xStatus | |
| If WScript.Arguments.Count > 0 Then | |
| xStatus = "" | |
| For pcount = 0 to WScript.Arguments.Count - 1 | |
| xStatus = xStatus & " " & WScript.Arguments.Item(pcount) | |
| Next | |
| Else | |
| WScript.Echo "Usage: TweetWSH <twitter status update>" | |
| WScript.Quit 1 'exit halt | |
| End If | |
| xStatus = TRIM(xStatus) | |
| IF myDebug THEN MsgBox "Attempting to send:" & VbCrLf & xStatus | |
| GetCommandLineString = xStatus | |
| End Function | |
| Sub SendTweet (thisText) | |
| 'Start Tweeting | |
| Dim objOAuth : Set objOAuth = New cLibOAuth | |
| 'SECRET! Consumer key! | |
| objOAuth.ConsumerKey = myConsumerKey | |
| 'SECRET! Consumer Secret! | |
| objOAuth.ConsumerSecret = myConsumerSecret | |
| objOAuth.EndPoint = TWITTER_OAUTH_URL_UPDATE_STATUS | |
| 'SECRET! access token | |
| objOAuth.Parameters.Add "oauth_token", myAccessToken | |
| 'set Status; the actual message to be sent to Twitter | |
| objOAuth.Parameters.Add "status", thisText | |
| 'SECRET! access token secret | |
| objOAuth.Parameters.Add "oauth_token_secret", myAccessSecret | |
| objOAuth.RequestMethod = OAUTH_REQUEST_METHOD_POST | |
| objOAuth.Send() | |
| Set objOAuth = Nothing | |
| ' END of Tweeting | |
| End Sub | |
| SendTweet GetCommandLineString | |
| </script> | |
| </job> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment