cnsOauthTokenSecret As String = "yourtwitteraccesstokensecret"Const cnsURLPost As String = "https://api.twitter.com/1.1/statuses/update.json"Const cnsURLMedia As String = "https://api.twitter.com/1.1/statuses/update_with_media.json"Const cnsURLStatus As String = "https://api.twitter.com/1.1/help/configuration.json"Const cnsMethod As String = "HMAC-SHA1"Const cnsOauthVersion As String = "1.0"'Following only necessary if using Google's goo.gl link shortener APIConst cnsGoogleShortenerURL As String = "https://www.googleapis.com/urlshortener/v1/url"Const cnsGoogleShortenerKey As String = "yourgoogleshortenerkeyhere"Funcoes auxiliaresEm seguida, olharemos para algumas funcoes auxiliares para criar / enviar nossos tweets.O LocalTimeToUTC funcao converte um valor de data em formato UTC. Gracas ao codigo do Allen Wyatt.Public Function LocalTimeToUTC(dteTime As Date) As Date Dim dteLocalFileTime As FILETIME Dim dteFileTime As FILETIME Dim dteLocalSystemTime As SYSTEMTIME Dim dteSystemTime As SYSTEMTIME dteLocalSystemTime.wYear = CInt(Year(dteTime)) dteLocalSystemTime.wMonth = CInt(Month(dteTime)) dteLocalSystemTime.wDay = CInt(Day(dteTime)) dteLocalSystemTime.wHour = CInt(Hour(dteTime)) dteLocalSystemTime.wMinute = CInt(Minute(dteTime)) dteLocalSystemTime.wSecond = CInt(Second(dteTime)) Call SystemTimeToFileTime(dteLocalSystemTime, _ dteLocalFileTime) Call LocalFileTimeToFileTime(dteLocalFileTime, _ dteFileTime) Call FileTimeToSystemTime(dteFileTime, dteSystemTime) LocalTimeToUTC = CDate(dteSystemTime.wMonth & "/" & _ dteSystemTime.wDay & "/" & _ dteSystemTime.wYear & " " & _ dteSystemTime.wHour & ":" & _ dteSystemTime.wMinute & ":" & _ dteSystemTime.wSecond)End FunctionO Twitter usa o OAuth Autorization para validar todas as solicitacoes. Um dos parametros necessarios do OAuth e um timestamp (ou seja, o numero de segundos decorridos desde 1 de janeiro de 1970 00:00:00 GMT). A funcao get_timestamp fornece uma sequencia timestamp no formato exigido.Public Function get_timestamp() As String get_timestamp = DateDiff("s", #1/1/1970#, LocalTimeToUTC(Now))End FunctionA funcao EncodeBase64 recebe um array de bytes e converte para uma string codificada em base64. E usado para converter dados binarios em uma cadeia de caracteres ASCII. Pensava que esta era uma tecnica escorregadia; criar um documento XML (usando o objeto MSXML2.DOMDocument), crie um no e e atribuia os dados binarios para ele. Em seguida, basta ler a propriedade de texto do mesmo no (MSMXL2.DOMDocument ira lidar com a conversao automaticamente). Gracas a Tim Hastings para o codigo.Public Function EncodeBase64(ByRef arrData() As Byte) As String Dim objXML As MSXML2.DOMDocument Dim objNode As MSXML2.IXMLDOMElement Set objXML = New MSXML2.DOMDocument ' byte array to base64 Set objNode = objXML.createElement("b64") objNode.DataType = "bin.base64" objNode.nodeTypedValue = arrData EncodeBase64 = objNode.Text Set objNode = Nothing Set objXML = Nothing End FunctionO Base64_HMACSHA1 e uma funcao que utiliza um par de classes do namespace .Net Sistema de hash uma string em um SHA-1 digere e calcula um codigo de autenticacao HMAC usando uma chave secreta. (voce pode usar o metodo VBA CreateObject para utilizar quaisquer classes .Net que sao 'explicitamente expostas como componentes COM') Gracas ao codigo da HK1.Public Function Base64_HMACSHA1(ByVal sTextToHash As String, ByVal sSharedSecretKey As String) As String Dim asc As Object Dim enc As Object Dim TextToHash() As Byte Dim SharedSecretKey() As Byte Set asc = CreateObject("System.Text.UTF8Encoding") Set enc = CreateObject("System.Security.Cryptography.HMACSHA1") TextToHash = asc.Getbytes_4(sTextToHash) SharedSecretKey = asc.Getbytes_4(sSharedSecretKey) enc.key = SharedSecretKey Dim bytes() As Byte bytes = enc.ComputeHash_2((TextToHash)) Base64_HMACSHA1 = EncodeBase64(bytes) Set asc = Nothing Set enc = Nothing End FunctionA funcao binary_file_to_string recebe um arquivo binario (como um arquivo de imagem) e a converte para uma string. Vamos eventualmente usar esta funcao quando quisermos incluir imagens em nossos tweets. Nada muito complicado aqui; apenas ler um arquivo binario em um array de bytes, em seguida, usaremos a funcao VBA built-in StrConv para