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