LoginSignup
26

More than 5 years have passed since last update.

Social.framework を利用して Twitter の DM を送信する

Last updated at Posted at 2013-05-16

Social.framework (と Accounts.framework)を利用して Twitter の DM を送信する手順です。

1. フレームワークをプロジェクトに追加

以下の2つを追加し、

  • Social.framework
  • Accounts.framework

DM送信を実装するクラスでヘッダをインポートしておきます。

#import <Social/Social.h>
#import <Accounts/Accounts.h>

2. Twitterアカウントのアクセス権を取得

Twitterアカウントのアクセス権を取得し、ACAccountオブジェクトを取得します。

ACAccountStore *store = [[ACAccountStore alloc] init];
ACAccountType *type = [store accountTypeWithAccountTypeIdentifier:
                              ACAccountTypeIdentifierTwitter];

[store requestAccessToAccountsWithType:type
                               options:nil
                            completion:^(BOOL granted, NSError *error) {

                                if (!granted) {

                                    NSLog(@"not granted");

                                    return;
                                }

                                NSArray *twitterAccounts = [store accountsWithAccountType:type];

                                if (!(twitterAccounts > 0)) {

                                    NSLog(@"no twitter accounts");

                                    return;
                                }

                                ACAccount *account = [twitterAccounts lastObject];
                            }];

3. DM 送信

SLRequestクラスを利用して、direct_messages/new APIをたたきます。

NSURL *url = [NSURL URLWithString:@"https://api.twitter.com/1.1/direct_messages/new.json"];
NSDictionary *parameters = @{@"text": @"テスト送信",
                             @"screen_name": @"shu223"};

SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeTwitter
                                        requestMethod:SLRequestMethodPOST
                                                  URL:url
                                           parameters:parameters];

request.account = account;
[request performRequestWithHandler:^(NSData *responseData,
                                     NSHTTPURLResponse *urlResponse,
                                     NSError *error)
 {
     NSError *jsonError = nil;
     id jsonData = [NSJSONSerialization JSONObjectWithData:responseData
                                               options:0
                                                 error:&jsonError];
     if (error){

         NSLog(@"error:%@", error);
     }

     if (jsonError) {

         NSLog(@"jsonerror:%@", jsonError);
     }

     dispatch_async(dispatch_get_main_queue(), ^{

         NSLog(@"jsondata:%@" , jsonData);
     });
 }];

上で使用しているパラメータについて補足すると、

  • text
    • 送信するテキスト
    • required
  • screen_name
    • 宛先ユーザーのscreen name(@のあとに続く名前)
    • option

となっています。

補足

iOS 6 より deprecated になりましたが、Twitter.framework の TWRequest を用いても同様のことができます。

TWRequest *request = [[TWRequest alloc] initWithURL:url
                                         parameters:parameters
                                      requestMethod:TWRequestMethodPOST];

参考資料

POST direct_messages/new | Twitter Developers

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26