Attribute VB_Name = "Twitter"
Private pTwitterClient As WebClient
Private pTwitterKey As String
Private pTwitterSecret As String

' Implement caching for Consumer Key, Consumer Secret, and WebClient

Private Property Get TwitterKey() As String
    If pTwitterKey = "" Then
        If Credentials.Loaded Then
            pTwitterKey = Credentials.Values("Twitter")("key")
        Else
            pTwitterKey = InputBox("Please Enter Twitter Consumer Key")
        End If
    End If
    
    TwitterKey = pTwitterKey
End Property
Private Property Get TwitterSecret() As String
    If pTwitterSecret = "" Then
        If Credentials.Loaded Then
            pTwitterSecret = Credentials.Values("Twitter")("secret")
        Else
            pTwitterSecret = InputBox("Please Enter Twitter Consumer Secret")
        End If
    End If
    
    TwitterSecret = pTwitterSecret
End Property

Private Property Get TwitterClient() As WebClient
    If pTwitterClient Is Nothing Then

        Set pTwitterClient = New WebClient
        pTwitterClient.BaseUrl = "https://api.twitter.com/1.1/"
        
        Dim Auth As New TwitterAuthenticator
        Auth.Setup _
            ConsumerKey:=TwitterKey, _
            ConsumerSecret:=TwitterSecret
        Set pTwitterClient.Authenticator = Auth
    End If
    
    Set TwitterClient = pTwitterClient
End Property



Private Function SearchTweetsRequest(Query As String) As WebRequest
    Set SearchTweetsRequest = New WebRequest
    SearchTweetsRequest.Resource = "search/tweets.{format}"
    
    SearchTweetsRequest.Format = Json
    SearchTweetsRequest.AddUrlSegment "format", "json"
    SearchTweetsRequest.AddQuerystringParam "q", Query
    SearchTweetsRequest.AddQuerystringParam "lang", "en"
    SearchTweetsRequest.AddQuerystringParam "count", 20
    SearchTweetsRequest.Method = HttpGet
End Function

Public Function SearchTwitter(Query As String) As WebResponse
    Set SearchTwitter = TwitterClient.Execute(SearchTweetsRequest(Query))
End Function

'Public Sub SearchTwitterAsync(query As String, Callback As String)
'    TwitterClient.ExecuteAsync SearchTweetsRequest(query), Callback
'End Sub