Twitter – actualizar IP e receber alerta por SMS

Lembrei-me de andar a brincar um bocadinho com a API do Twitter e nada melhor que um exemplo prático para testar 🙂

O que o código abaixo faz é o seguinte:

1º – Usa o site http://checkip.dyndns.org/ para extrair o IP público actual.

2º – Saca o arquivo de estados da conta do Twitter e vai buscar o último IP (ultimo estado)

3º – Actualiza o estado da conta do Twitter com o novo IP no caso de ser diferente do devolvido no ponto 2.

'###############################################
        ' update your ip address to a twitter account
        '###############################################

        Dim c As CredentialCache = New CredentialCache
        Dim w As WebClient = New WebClient
        Dim newIP As String = ""
        Dim oldIP As String = ""

        Try
            ' get external ip address
            newIP = w.DownloadString("http://checkip.dyndns.org/")
            Dim regex As New Regex("<[^>]*>")
            newIP = regex.Replace(newIP, "")
            newIP = newIP.Substring(newIP.IndexOf(":") + 1).Trim

            'carrega as credenciais
            c.Add(New Uri("http://twitter.com"), "Basic",
New NetworkCredential("NomeUtilizador", "Password"))
            w.Credentials = c

            ' load archive to get last ip address
            Dim archive As String =
w.DownloadString("http://twitter.com/account/archive.xml")
            Dim _archive As New XmlDocument
            _archive.LoadXml(archive)

            'get ip address from first childnode (last update node)
            oldIP = _archive.SelectSingleNode("statuses").
FirstChild("text").InnerText.Trim

            ' compare new and old ip address and update if <>
            If Not String.Equals(newIP, oldIP) Then
                ' prepare postvar
                Dim pd As String = "status=" + newIP.ToString
                Dim pdArray As Byte() = Encoding.ASCII.GetBytes(pd)
                Dim responseArray As Byte() =
w.UploadData("http://twitter.com/statuses/update.xml", "POST", pdArray)

                Dim _status As New XmlDocument
                'load into xmldocument the http response
                _status.LoadXml(Encoding.ASCII.GetString(responseArray))
                'update successful ?
                If String.Equals(_status.SelectSingleNode("status/text").
InnerText.Trim, newIP) Then
                    ' yeah o/ i've done it !!!
                End If
            Else
                ' no update necessary ...
            End If

        Catch ex As Exception
            Debug.Print(ex.ToString)
        End Try

Para isto funcionar, cria uma conta no Twitter só para ter os IPs actualizados e depois na conta principal vai a esta conta e faz o Follow ( activar a opção “Device Updates” e associar o nº de telemovel à conta ).

Podem fazer o download da solução com este código na página de projectos.