twittergo



  • hi,

    ich verwendet twittergo und versuch filter.json zu verwenden. ich kann leider in der docu nicht finden, welche funktion anstatt von: results = &twittergo.SearchResults{} aufgerufen werden soll!?

    package main
    
    import (
      "flag"
      "fmt"
      "github.com/kurrik/oauth1a"
      "github.com/kurrik/twittergo"
      "io/ioutil"
      "net/http"
      "net/url"
      "os"
      "strings"
      "time"
    )
    
    const MINWAIT = time.Duration(10) * time.Second
    
    func LoadCredentials() (client *twittergo.Client, err error) {
      credentials, err := ioutil.ReadFile("CREDENTIALS")
      if err != nil {
        return
      }
      lines := strings.Split(string(credentials), "\n")
      config := &oauth1a.ClientConfig{
        ConsumerKey:    lines[0],
        ConsumerSecret: lines[1],
      }
      user := oauth1a.NewAuthorizedConfig(lines[2], lines[3])
      client = twittergo.NewClient(config, user)
      return
    }
    
    type Args struct {
      Query      string
      ResultType string
    }
    
    func parseArgs() *Args {
      a := &Args{}
      flag.StringVar(&a.Query, "query", "twitter", "Search query")
      flag.StringVar(&a.ResultType, "result_type", "", "Type of search results to receive")
      flag.Parse()
      return a
    }
    
    func main() {
      var (
        err     error
        client  *twittergo.Client
        req     *http.Request
        resp    *twittergo.APIResponse
        results *twittergo.SearchResults
        //args    *Args
        i       int
      )
      //args = parseArgs()
      if client, err = LoadCredentials(); err != nil {
        fmt.Printf("Could not parse CREDENTIALS file: %v\n", err)
        os.Exit(1)
      }
      query := url.Values{}
      query.Set("track", "twitter")
      //query.Set("q", args.Query)
      //if args.ResultType != "" {
      //  query.Set("result_type", args.ResultType)
      //}
      i = 1
      for {
        data := url.Values{}
        data.Set("track", "twitter")
        body := strings.NewReader(data.Encode())
        req, err = http.NewRequest("POST", "/1.1/statuses/filter.json", body)
    
        //url := fmt.Sprintf("/1.1/statuses/filter.json?%v", query.Encode())
        //req, err = http.NewRequest("POST", url, nil)//strings.NewReader(query.Encode())) //query.Encode())
        if err != nil {
          fmt.Printf("Could not parse request: %v\n", err)
          break
        }
        resp, err = client.SendRequest(req)
        if err != nil {
          fmt.Printf("Could not send request: %v\n", err)
          break
        }
    
        //fmt.Printf("resp: %v\n", url)
    
        results = &twittergo.SearchResults{}
        if err = resp.Parse(results); err != nil {
          if rle, ok := err.(twittergo.RateLimitError); ok {
            dur := rle.Reset.Sub(time.Now()) + time.Second
            if dur < MINWAIT {
              // Don't wait less than minwait.
              dur = MINWAIT
            }
            msg := "Rate limited. Reset at %v. Waiting for %v\n"
            fmt.Printf(msg, rle.Reset, dur)
            time.Sleep(dur)
            continue // Retry request.
          } else {
            fmt.Printf("Problem parsing response: %v\n", err)
            break
          }
        }
        fmt.Printf("\n")
        for _, tweet := range results.Statuses() {
          user := tweet.User()
          fmt.Printf("%v.) %v\n", i, tweet.Text())
          fmt.Printf("From %v (@%v) ", user.Name(), user.ScreenName())
          fmt.Printf("at %v\n\n", tweet.CreatedAt().Format(time.RFC1123))
          i += 1
        }
        //if query, err = results.NextQuery(); err != nil {
        //  fmt.Printf("No next query: %v\n", err)
        //  break
        //}
        if resp.HasRateLimit() {
          fmt.Printf("Rate limit:           %v\n", resp.RateLimit())
          fmt.Printf("Rate limit remaining: %v\n", resp.RateLimitRemaining())
          fmt.Printf("Rate limit reset:     %v\n", resp.RateLimitReset())
        } else {
          fmt.Printf("Could not parse rate limit from response.\n")
        }
      }
    }
    


  • Ehm, was genau möchtest du machen? Und was geht dabei schief? Das ist so leider nicht ernsthaft verständlich.

    Mit Go kann ich dir helfen, zum Raten habe ich aber keine Lust.



  • golang schrieb:

    ich kann leider in der docu nicht finden, welche funktion anstatt von: results = &twittergo.SearchResults{} aufgerufen werden soll!?

    Das könnte daran liegen, dass

    results = &twittergo.SearchResults{}
    

    gar kein Funktionsaufruf ist. Die rechte Seite der Zuweisung ist ein Composite-Literal. SearchResults ist also ein Typ aus dem Package twittergo. Das Statement ist gleichwertig zu

    results = new(twittergo.SearchResults)
    

    Eigentlich müsstest du das aber doch wissen, schließlich hast du weiter oben in der Funktion "results" ja als Pointer auf diesen Typ deklariert.



  • ich bekomme den fehler: Problem parsing response: Error 34: Sorry, that page does not exist.

    hier der http request:

    request: POST /1.1/statuses/filter.json HTTP/1.1
    Host: api.twitter.com
    Authorization: OAuth oauth_consumer_key="fooo", oauth_nonce="bar", oauth_signature="foobar", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1400411501", oauth_token="root", oauth_version="1.0"
    Content-Type: application/x-www-form-urlencoded
    

Anmelden zum Antworten