mixi2 Developer Platform
開発ガイド

API の使い方

mixi2 API を使用してポストの作成、DM の送信、メディアのアップロードなどを行う方法を解説します。

このガイドでは、mixi2 API を使用してアプリケーションから各種操作を行う方法を解説します。

前提条件

主要 API 一覧

RPC説明
CreatePostポストを作成(返信/引用/メディア添付対応)
SendChatMessageチャットメッセージを送信(テキスト/メディア添付)
InitiatePostMediaUploadメディアアップロードを開始
GetPostMediaStatusメディアのアップロード/処理状況を取得
GetStampsスタンプ一覧を取得
AddStampToPostポストにスタンプを付与
GetUsersユーザー情報を取得
GetPostsポスト情報を取得

ポストの作成

CreatePost RPC を使用してポストを作成します。

基本的なポスト

resp, err := client.CreatePost(ctx, &application_apiv1.CreatePostRequest{
    Text: "こんにちは!",
})

リプライ

受信したポストに返信する場合は、in_reply_to_post_id を指定します。

inReplyToPostId := event.Post.PostId
resp, err := client.CreatePost(ctx, &application_apiv1.CreatePostRequest{
    Text:            "返信ありがとうございます!",
    InReplyToPostId: &inReplyToPostId,
})

引用ポスト

他のポストを引用する場合は、quoted_post_id を指定します。

quotedPostId := originalPostId
resp, err := client.CreatePost(ctx, &application_apiv1.CreatePostRequest{
    Text:         "これは面白い投稿ですね!",
    QuotedPostId: &quotedPostId,
})

in_reply_to_post_idquoted_post_id は同時に指定できません。

マスク付きポスト

センシティブなコンテンツやネタバレを含むポストには、マスクを適用できます。

caption := "映画のネタバレ注意"
resp, err := client.CreatePost(ctx, &application_apiv1.CreatePostRequest{
    Text: "ネタバレを含む内容です...",
    PostMask: &modelv1.PostMask{
        MaskType: constv1.PostMaskType_POST_MASK_TYPE_SPOILER,
        Caption:  &caption,
    },
})
マスク種別説明
POST_MASK_TYPE_SENSITIVE刺激的なコンテンツに対する注意喚起
POST_MASK_TYPE_SPOILERネタバレ防止のための注意喚起

ユースケース:

  • センシティブな可能性があるコンテンツに予防的にマスクを適用
  • ゲーム攻略・レビューボットでネタバレを含む返信にスポイラーマスクを適用
  • ユーザーが「ネタバレあり」などのキーワードを含めた場合に自動でマスクを適用

配信設定

ポストの配信範囲を制御できます。

publishingType := constv1.PostPublishingType_POST_PUBLISHING_TYPE_NOT_PUBLISHING
resp, err := client.CreatePost(ctx, &application_apiv1.CreatePostRequest{
    Text:           "このポストはプロフィールにのみ表示されます",
    PublishingType: &publishingType,
})
配信設定説明
POST_PUBLISHING_TYPE_UNSPECIFIEDフォロワーのタイムラインに公開(デフォルト)
POST_PUBLISHING_TYPE_NOT_PUBLISHINGプロフィールにのみ公開

NOT_PUBLISHING は、特定ユーザーへの返信時にフォロワー全体のタイムラインに流さない場合や、テスト投稿に便利です。

ポスト作成の制限

項目制限
テキスト最大文字数149 文字
メディア添付最大 4 件
メンション数文字数に収まる限り制限なし

DM の送信

SendChatMessage RPC を使用して DM を送信します。

text := "メッセージを受け取りました!"
resp, err := client.SendChatMessage(ctx, &application_apiv1.SendChatMessageRequest{
    RoomId: event.Message.RoomId,
    Text:   &text,
})

アプリケーションから先に DM を送ることはできません。ユーザーから DM を受信した際に、イベントに含まれる room_id を使用して返信できます。

DM 送信の制限

項目制限
先送り可否不可(ユーザーからの DM 受信後のみ返信可能)
必須フィールドtext または media_id のいずれか

メディアのアップロード

ポストや DM にメディア(画像・動画)を添付するには、以下のフローで処理します。

Step 1: アップロードの開始

InitiatePostMediaUpload を呼び出して、media_idupload_url を取得します。

description := "画像の説明(任意)"
resp, err := client.InitiatePostMediaUpload(ctx, &application_apiv1.InitiatePostMediaUploadRequest{
    MediaType:   application_apiv1.InitiatePostMediaUploadRequest_TYPE_IMAGE,
    ContentType: "image/jpeg",
    DataSize:    uint64(len(imageData)),
    Description: &description,
})

mediaId := resp.MediaId
uploadUrl := resp.UploadUrl

Step 2: メディアのアップロード

取得した upload_url にメディアデータを PUT で送信します。

req, err := http.NewRequest(http.MethodPut, uploadUrl, bytes.NewReader(imageData))
req.Header.Set("Content-Type", "image/jpeg")
httpClient.Do(req)

Step 3: 処理状況の確認

GetPostMediaStatus でメディアの処理状況を確認します。STATUS_COMPLETED になるまでポーリングしてください。

for {
    statusResp, err := client.GetPostMediaStatus(ctx, &application_apiv1.GetPostMediaStatusRequest{
        MediaId: mediaId,
    })
    if statusResp.Status == application_apiv1.GetPostMediaStatusResponse_STATUS_COMPLETED {
        break
    }
    if statusResp.Status == application_apiv1.GetPostMediaStatusResponse_STATUS_FAILED {
        // エラー処理: アップロードをやり直す必要があります
        return errors.New("media processing failed")
    }
    time.Sleep(1 * time.Second)
}
ステータス説明
STATUS_UPLOAD_PENDINGアップロード待機中
STATUS_PROCESSING処理中
STATUS_COMPLETED完了
STATUS_FAILED失敗

Step 4: ポストへの添付

処理が完了したら、CreatePostmedia_id を指定してポストを作成します。

resp, err := client.CreatePost(ctx, &application_apiv1.CreatePostRequest{
    Text:        "画像を添付しました!",
    MediaIdList: []string{mediaId},
})

メディアアップロードの制限

項目制限
画像最大サイズ15 MB
動画最大サイズ50 MB
対応フォーマットJPEG, PNG, GIF, MP4 など
アップロード有効期限(画像)200 秒
アップロード有効期限(動画)600 秒

STATUS_FAILED になったメディアは再利用できません。InitiatePostMediaUpload からやり直してください。

スタンプの付与

AddStampToPost RPC を使用して、ポストにスタンプを付与できます。

// 利用可能なスタンプ一覧を取得
language := constv1.LanguageCode_LANGUAGE_CODE_JP
stampsResp, err := client.GetStamps(ctx, &application_apiv1.GetStampsRequest{
    OfficialStampLanguage: &language,
})

// スタンプを付与
_, err = client.AddStampToPost(ctx, &application_apiv1.AddStampToPostRequest{
    PostId:  postId,
    StampId: stampsResp.OfficialStampSets[0].Stamps[0].StampId,
})

スタンプ付与の制限

項目制限
対象ポストアプリケーションにメンションしているポストのみ
使用可能なスタンプ公式スタンプのみ
付与回数同じポストに複数回付与不可

アプリケーションが付与したスタンプを取り消す機能は現在提供されていません。

ユースケース

  • ユーザーからのメンションに対して「確認しました」の意味でスタンプを付与
  • 特定のキーワードを含むメンションにリアクションスタンプを付与
  • 返信の代わりに軽量なリアクションとして使用

ユーザー情報の取得

GetUsers RPC を使用して、ユーザー情報を取得できます。

resp, err := client.GetUsers(ctx, &application_apiv1.GetUsersRequest{
    UserIdList: []string{event.Post.CreatorId},
})

for _, user := range resp.Users {
    fmt.Printf("ユーザー名: %s\n", user.DisplayName)
}

ユースケース

  • イベントで受信したユーザーの詳細情報(表示名、アイコン URL)を取得
  • ポスト作成者の情報を取得してログ出力や管理画面に表示

アプリケーションがアクセス可能なユーザー情報のみ取得できます。

ポスト情報の取得

GetPosts RPC を使用して、ポスト情報を取得できます。

resp, err := client.GetPosts(ctx, &application_apiv1.GetPostsRequest{
    PostIdList: []string{event.Post.GetInReplyToPostId()},
})

for _, post := range resp.Posts {
    fmt.Printf("ポスト本文: %s\n", post.Text)
}

ユースケース

  • リプライや引用ポストを受信した際に、元のポスト情報(本文、メディア、スタンプ等)を取得
  • メンションされたポストの添付メディアやスタンプ情報を確認

アプリケーションがアクセス可能なポストのみ取得できます。

次のステップ

On this page