質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.00%

カレンダーのイベントが6つ作成されてしまう

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 66

Kodanosuke

score 18

前提・実現したいこと

あるサイトから情報を取得し、その情報をもとにGoogleカレンダーでイベントを作成するコードを書いています。
カレンダーのイベントを作成するコードを実行すると同じ内容のイベントが6つも作成されてしまいます。
回避するにはどのようにしたらいいでしょうか。
ご教授いただけると幸いです。
よろしくお願いいたします。

発生している問題・エラーメッセージ

特になし

該当のソースコード

function sendGameInfo() {
  var url, mail;
  var html;
  var stadium
  //翌翌週の日曜日の試合情報を取得するアドレスを設定する
  var next2sun = getnext2Sunday()
  var address = setAddress(next2sun)

  //情報を取得  
  html = UrlFetchApp.fetch(address).getContentText("shift-jis");
  var parse = Parser.data(html);
  var stadium_data = Parser.data(html).from('<tr class="schedule-index">').to('</tr>').iterate();
  var prestadium = stadium_data[0].replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,'').replace(/\s+/g, "");
  var cut_posi = prestadium.search("(")
  stadium = prestadium.slice(0,cut_posi)
  var part1 = Parser.data(html).from('<td align="right" class="schedule-index">').to('</td>').iterate();
  var part2 = Parser.data(html).from('<td align="center" class="schedule-index">').to('</td>').iterate();
  var num = part1.length;



  var kari
  var list_time=[]
  for (var ij=0;ij<num;ij++){

    kari = makeTime(part1[ij],next2sun)
    list_time.push(kari)

  }

  var elements = arrangeGameInfo(part2)
  elements['time'] = list_time[elements['flag']]
  elements['location'] = stadium
  //試合がないときは何も処理をしない
  if(elements['flag']==-1){    
  }
  //試合があるときはカレンダーで連絡する
  else if(elements['flag']!=-1){

    //スプレッドシートからメンバーの一覧を取得する
    var ssheet,sheet,member
    ssheet = SpreadsheetApp.getActiveSpreadsheet()
    sheet = ssheet.getSheetByName('MemberList')
    var range = sheet.getRange('C2:C').getValues()
    member = Array.prototype.concat.apply([], range).filter(Boolean)

    var c_title,c_startTime,c_endTime,competitor,body,options
    c_title = "試合"+":"+elements['competition']
    c_startTime = new Date(new Date(elements['time']).setHours(new Date(elements['time']).getHours()-1))
    c_endTime = new Date(new Date(elements['time']).setHours(new Date(elements['time']).getHours()+2))

    if(elements['top_team'] == "チーム名"){

      competitor = elements['bot_team']

    }else if(elements['bot_team'] == "チーム名"){

      competitor = elements['top_team']

    }

    body = "相手:"+competitor+"\n"+
      "ボール:"+elements['ball']+"\n"+
        "集合:"+Utilities.formatDate(c_startTime,"JST","HH:mm")+"\n"+
          "試合:"+elements['time'].substr(-5,5)

          options = {guset:mail,
                     description:body,
                     location:stadium}
          //ここで1回しか実行されないはずが6回実行されています。回避策を教えていただきたいです。
          CalendarApp.getCalendarById("asics.com_n962uf6279chmgdajrbho682ug@group.calendar.google.com").createEvent(c_title, c_startTime, c_endTime, options)

  }
   Logger.log(elements)
}

試したこと

同じタイトルのイベントが複数あった場合は1つを残して削除する、などのコードを試しましたがそもそもなぜこのようなことになるか知りたくて質問しました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • draq

    2019/12/01 18:14

    sendGameInfo が1度しか呼び出されていないことは確認されてますか。

    キャンセル

  • Kodanosuke

    2019/12/01 18:32

    コメントありがとうございます。
    それに関しては確認しております。
    これをメイン関数にして実行しているので複数回は実行してきません。

    キャンセル

  • macaron_xxx

    2019/12/02 09:46

    セミコロンがあったりなかったりするので、一度すべてのステートメントの最後にセミコロンをつけてみてください。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.00%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる