Использование поиска в Твиттере с помощью Twitter + OAuth на iPhone - PullRequest
0 голосов
/ 20 мая 2011

Изначально мне нужна была возможность использовать API поиска с твиттером. Я сделал это, используя замечательный MGTwitterEngine Мэтта Джеммелла . Этот код был очень очень простым и выглядел примерно так:

- (void)viewDidLoad {
    [super viewDidLoad];

    tweetArrays = nil;
    tweetNameArray = nil;

    NSString *username = @"<username>";
    NSString *password = @"<password>";

    NSString *consumerKey = @"<consumerKey>";
    NSString *consumerSecret = @"<consumerSecret>";

    // Most API calls require a name and password to be set...
    if (! username || ! password || !consumerKey || !consumerSecret) {
        NSLog(@"You forgot to specify your username/password/key/secret in AppController.m, things might not work!");
        NSLog(@"And if things are mysteriously working without the username/password, it's because NSURLConnection is using a session cookie from another connection.");
    }

    // Create a TwitterEngine and set our login details.
    twitterEngine = [[MGTwitterEngine alloc] initWithDelegate:self];
    [twitterEngine setUsesSecureConnection:NO];
    [twitterEngine setConsumerKey:consumerKey secret:consumerSecret];
    // This has been undepreciated for the purposes of dealing with Lists.
    // At present the list API calls require you to specify a user that owns the list.
    [twitterEngine setUsername:username];

[twitterEngine getSearchResultsForQuery:@"#HelloWorld" sinceID:0 startingAtPage:1 count:100];
}

Это приведет к вызову функции:

- (void)searchResultsReceived:(NSArray *)searchResults forRequest:(NSString *)connectionIdentifier

И тогда я мог делать то, что хотел, с помощью searchResults. Это потребовало от меня включения библиотеки yajl.

Затем я захотел расширить свой код, чтобы позволить пользователям твитить. Я скачал замечательный код Бена Готтлиба Twitter-OAuth-iPhone

Так что есть только одна проблема. GetSearchResultsForQuery возвращает requestFailed со следующей ошибкой:

Error Domain=HTTP Code=400 "The operation couldn’t be completed. (HTTP error 400.)"

Чтобы вызвать этот код, я просто взял демонстрационный проект в Twitter-OAuth-iPhone и добавил вызов getSearchResultsForQuery, как показано здесь:

- (void) viewDidAppear: (BOOL)animated {
    if (_engine) return;
    _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate: self];
    _engine.consumerKey = kOAuthConsumerKey;
    _engine.consumerSecret = kOAuthConsumerSecret;

    UIViewController            *controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self];

    if (controller) 
        [self presentModalViewController: controller animated: YES];
    else {
        [_engine getSearchResultsForQuery:@"HelloWorld"];
        // [_engine sendUpdate: [NSString stringWithFormat: @"Already Updated. %@", [NSDate date]]];
    }
}

Это, как указано выше, возвращает ошибку 400. Все остальные вызовы Twitter API, которые я здесь добавляю, работают так:

- (NSString *)getRepliesStartingAtPage:(int)pageNum;

Я что-то не так делаю? Или getSearchResultsForQuery больше не работает? Кажется, две базы кода используют разные версии MGTwitterEngine, может ли это быть причиной проблемы?

Спасибо!

1 Ответ

1 голос
/ 21 июня 2011

Проблема в том, что вам нужно создать движок Twitter как экземпляр SA_OAuthTwitterEngine, а не MGTwitterEngine. Когда вы вызываете getSearchResultsForQuery, он использует вызов _sendRequestWithMethod для фактической отправки поискового запроса. SA_OAuthTwitterEngine переопределяет реализацию MGTwitterEngine, но его версия этой функции не работает с getSearchResultsForQuery.

Итак, вам нужно перейти к getSearchResultsForQuery и заставить его использовать версию функции MGTwitterEngine.

...