ミーティング情報を取得します。(近日公開予定)

基本情報

認証 必要
HTTPメソッド GET

リソースURL

https://www.co-meeting.com/api/v1/meetings/show

パラメータ

meeting_id ミーティングのID、必須
ミーティングIDはミーティングを開いたURLまれる
http://www.co-meeting.com/g/<グループID>#!<ミーティングID>
omit_discussion ディスカッションの情報を省略するかどうかを指定
0: ディスカッションを取得(デフォルト)
1: ディスカッションを省略
omit_note 共有ノートの情報を省略するかどうかを指定
0: ノートを取得(デフォルト)
1: ノートを省略

サンプルリクエスト

POST https://www.co-meeting.com/api/v1/meetings/show?meeting_id=111222333444
{
  "status": "success",
  "result": {
    "title": "ミーティング名",
    "creator": "suzuki",
    "participants": {
      "suzuki": {
        "id": "111222333444555",
        "name": "鈴木太郎",
        "screen_name": "suzuki",
        "icon_url": "https://www.co-meeting.com/s/avatar/xxxxxx/thumb.jpg",
        "last_accessed_at": "2014-10-08T23:28:15+00:00"
      },
      "yamada": {
        "id": "111222333444555",
        "name": "山田花子",
        "screen_name": "yamada",
        "icon_url": "https://www.co-meeting.com/s/avatar/yyyyyy/thumb.jpg",
        "last_accessed_at": "2014-10-02T06:21:50+00:00"
      }
    },
    "updated_at": "2014-10-07T03:33:52Z",
    "discussion": {
      "threads": {"b+ksON83YrDOA": {"id": "b+ksON83YrDOA", "blipIds": ["b+ksON83YrDOA", "b+ksON83YrDOB"]}},
      "rootThread": {"blipIds": ["b+sym284ymyz1n"]},
      "blips": {
        "b+ksON83YrDOA": {
          "annotations": [],
          "properties": {},
          "elements": {
            "0": {"type": "LINE", "properties": {}}
          },
          "blipId": "b+ksON83YrDOA",
          "childBlipIds": [],
          "contributors": ["suzuki"],
          "creator": "suzuki",
          "content": "\ninline reply",
          "lastModifiedTime": "2014-10-07T11:50:54Z",
          "parentBlipId": "b+sym284ymyz1n",
          "version": 119,
          "replyThreadIds": [],
          "threadId": "b+ksON83YrDOA"
        },
        "b+ksON83YrDOB": {
          "annotations": [],
          "properties": {},
          "elements": {
            "0": {"type": "LINE","properties": {}}
          },
          "blipId": "b+ksON83YrDOB",
          "childBlipIds": [],
          "contributors": ["suzuki"],
          "creator": "suzuki",
          "content": "\nkeep thread",
          "lastModifiedTime": "2014-10-07T11:50:54Z",
          "parentBlipId": "b+sym284ymyz1n",
          "version": 92,
          "replyThreadIds": [],
          "threadId": "b+ksON83YrDOA"
        },
        "b+sym284ymyz1n": {
          "annotations": [
            {"name": "style/fontWeight", "value": "bold", "range": {"start": 33, "end": 38}},
            {"name": "style/fontStyle", "value": "italic", "range": {"start": 38, "end": 44}}
          ],
          "properties": {},
          "elements": {
            "0": {"type": "LINE", "properties": {}},
            "21": {"type": "LINE", "properties": {}},
            "20": {"type": "INLINE_BLIP", "properties": {"id": "b+ksON83YrDOA"}},
            "10": {"type": "LINE", "properties": {}},
            "11": {"type": "ATTACHMENT", "properties": {"attachmentId": "111222333444555", "caption": "IntercomBeta.png"}},
            "12": {"type": "LINE", "properties": {}}
          },
          "blipId": "b+sym284ymyz1n",
          "childBlipIds": ["b+ksON83YrDOA", "b+ksON83YrDOB"],
          "contributors": ["suzuki"],
          "creator": "suzuki",
          "content": "\ntest blip\n \nreplies \nannotation bold italic",
          "lastModifiedTime": "2014-10-07T11:50:54Z",
          "parentBlipId": nil,
          "version": 288,
          "replyThreadIds": ["b+ksON83YrDOA"],
          "threadId": ""
        }
      }
    }, 
    "note": {
      "annotations": [],
      "properties": {},
      "elements": {"0": {"type": "LINE", "properties": {}}},
      "blipId": "b+tcs1304old3tp",
      "childBlipIds": [],
      "contributors": ["suzuki"],
      "creator": "suzuki",
      "content": "\n",
      "lastModifiedTime": "2014-10-07T11:50:54Z",
      "version": 2,
    }
  }
}

レスポンス

result/title ミーティングのタイトル
result/creator ミーティング作成者のscreen_name
result/discussion ミーティング ディスカッションコンテンツ
result/discussion/threads ディスカッション内スレッドリスト スレッドIDとスレッド情報のハッシュ
スレッド情報は、表示順に整列されたスレッドに含まれるメッセージの配列を含む
各メッセージのフォーマットは、メッセージ(Blip)を参照
result/discussion/rootThread ディスカッション ルートスレッド
表示順に整列されたスレッドに含まれるメッセージの配列
書くメッセージの内容は、メッセージ(Blip)を参照
result/discussion/blips ディスカッション内メッセージリスト
メッセージIDとメッセージのハッシュ
スレッドはメッセージの枝(Edge)を表し、blipsに含まれるメッセージは葉(Leaf)
result/note ミーティング ノートコンテンツ
共有ノートには、1つのメッセージが含まれる
メッセージのフォーマットは、メッセージ(Blip)を参照

メッセージ(Blip)

blipId メッセージのID
creator メッセージ作成者のscreen_name
contributors メッセージ編集者のscreen_name
annotations メッセージに適用するスタイル
name スタイルの種類
value スタイルの値
range start: 開始位置 end: 終了位置 + 1
利用可能なスタイル
  • style/fontWeight: フォントの太さ
    • bold: 太字
  • style/fontStyle: フォントのスタイル
    • italic: イタリック
  • style/textDecoration: フォントの装飾
    • underline: 下線
    • line-through: 打ち消し線
  • style/fontFamily: フォントのファミリ
  • style/color: フォントの色
properties メッセージの付加情報
icons メッセージに付けられているアイコンリスト
アイコンの種類とアイコンを付けたユーザのリストのハッシュ
  • LIKE: いいね
  • DONT_LIKE: イマイチ
  • QUESTION: 疑問
  • TODO: Todo
  • DIGRESS: 脱線
elements メッセージ内に適用するHTMLタグ
要素開始位置をインデックスとするハッシュ
type 要素のタイプ
  • LINE: 行
  • ATTACHMENT: 画像
  • INLINE_BLIP: メッセージ内スレッド
properties 要素のプロパティ

ATTACHMENT
  • attachmentId: 添付ファイルのID、添付ファイル情報取得 API attachments GET show で使用
INLINE_BLIP
  • id: スレッドのID、result/discussion/threads からスレッド情報を取得するためのID
content メッセージテキスト

サンプルコード

require 'json'
require 'oauth2'

client_id = "11112222333344445555"
client_secret = "11112222333344445555"
$client = OAuth2::Client.new(client_id, client_secret, :site => 'https://www.co-meeting.com')
puts $client.auth_code.authorize_url(:redirect_uri => 'urn:ietf:wg:oauth:2.0:oob')
authorization_token = STDIN.gets.chomp
$access_token = $client.auth_code.get_token(authorization_token, :redirect_uri => 'urn:ietf:wg:oauth:2.0:oob').token
json = OAuth2::AccessToken.new($client, $access_token).get('/api/v1/meetings/show?meeting_id=11112222333344445555').body

$meeting = JSON.parse(json)['result']
puts $meeting
$discussion = $meeting['discussion']

def render_attachment(attachment_id)
  json = OAuth2::AccessToken.new($client, $access_token).get('/api/v1/attachments/show?attachment_id=' + attachment_id).body
  attachment = JSON.parse(json)['result']
  "<img src='" + attachment['thumbnail_url'] + "'/>"
end

def render_blip(blip_id)
  blip_html = "<div style='border: 1px solid #ddd;padding: 3px 5px 3px 10px;'>"
  blip = $discussion['blips'][blip_id]

  # テキストを1文字ずつ分割
  content = blip['content']
  content_char_array = content.split(//)
  
  # elementsをコンテンツに適用
  # 要素はインデックス順にソートしてから処理する
  need_close_line = false
  blip['elements'].sort.each do |index, element|
    element_string = ''
    if element['type'] == 'LINE' && need_close_line
      element_string += '</div>'
      need_close_line = false
    end
    
    case element['type']
    when 'LINE' then
      element_string += '<div>'
      need_close_line = true
    when 'ATTACHMENT' then
      element_string += render_attachment(element['properties']['attachmentId'])
    when 'INLINE_BLIP' then
      $discussion['threads'][element['properties']['id']]['blipIds'].each do |blip_id|
        element_string += render_blip(blip_id)
      end
    end
    content_char_array[index.to_i] = element_string
  end

  # annotationをコンテンツに適用
  blip['annotations'].each do |annotation|
    start_element_string = "<span style='"
    end_element_string = "</span>"
    case annotation['name']
    when 'style/fontWeight' then
      start_element_string += "font-weight:" + annotation['value'] + ";"
    when 'style/fontStyle' then
      start_element_string += "font-style:" + annotation['value'] + ";"
    end
    start_element_string += "'>"
    content_char_array[annotation['range']['start'].to_i] = start_element_string + content_char_array[annotation['range']['start'].to_i] 
    content_char_array[annotation['range']['end'].to_i - 1] = content_char_array[annotation['range']['end'].to_i - 1] + end_element_string
  end

  blip_html += content_char_array.join + '</div>' # 最後のLINEを閉じる
  blip_html + "</div>"
end

$discussion['rootThread']['blipIds'].each do |blip_id|
  puts render_blip(blip_id)
end