• このエントリーをはてなブックマークに追加
どうも、靖宗です。
その4~5で作ったスクリプトのソースコードを公開しておきます。


function getLivePage(pageNum) {
  var url = "http://ch.nicovideo.jp/mentalist/live?&page=" + String(pageNum);
  var response = UrlFetchApp.fetch(url);
  return response.getContentText();
}

function subPastParser(htmlText) {
  // 一致する文字列が返る
  return htmlText.match(/<section class=\"sub past\">([\s\S]*?)<\/section>/m)[1];
}

function liveItemParser(htmlText) {
  // 一致する文字列の"配列"が返る
  return htmlText.match(/<div class=\"item_right\">[\s\S]*?<\/div>/gm);
}

function getLiveInfo(htmlText) {
  var returnObject = {
    /*
    lv_name: {
      title     : "オックスフォードからお届け",
      date      : "2018/08/08",
      dayOfWeek : "水",
      time      : "20:00:00"
    },
    */
  };
  var liveInfoArray = liveItemParser(htmlText);
 
  for(var i = 0; i < liveInfoArray.length; i++){
    var liveName = liveInfoArray[i].match(/<a href=\"http:\/\/live.nicovideo.jp\/gate\/([\s\S]*?)\">/)[1];
    var title = liveInfoArray[i].match(/<h2 class=\"title\">[\s\S]*?<a href=\"[\s\S]*?\">([\s\S]*?)<\/a>/m)[1];
    var dateInfo = liveInfoArray[i].match(/<p class=\"date\">([\s\S]*?)<\/p>/m)[1].trim();
    var date = dateInfo.match(/\d{4}\/\d{2}\/\d{2}/)[0];
    var dayOfWeek = dateInfo.match(/\(([\s\S])\)/)[1];
    var time = dateInfo.match(/\d{2}:\d{2}:\d{2}/)[0];
    returnObject[liveName] = {
      title     : title,
      date      : date,
      dayOfWeek : dayOfWeek,
      time      : time
    };
  }
 
  return returnObject;
}

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var headerArray = ["live name", "title", "date", "day of week", "time"];
 
  sheet.clear();
  sheet.appendRow(headerArray);

  var pageNum = 1;
  while (true) {
    var text = getLivePage(pageNum);
    var subPastText = subPastParser(text);
    var liveInfo = getLiveInfo(subPastText);
    var nextPage = text.match(/<li class=\"next([\s\S]*?)\">/)[1];  // disabledが入ってたら"disabled"
    
    for(var key in liveInfo){
      var writeArray = [];
      writeArray.push(key); // live name
      writeArray.push(liveInfo[key].title); // title
      writeArray.push(liveInfo[key].date); // date
      writeArray.push(liveInfo[key].dayOfWeek); // day of week
      writeArray.push(liveInfo[key].time); // time
      
      sheet.appendRow(writeArray);
    }
    
    if(nextPage !== ""){
      break;
    }
    else {
      pageNum++;
    }
  }
}

どうも、靖宗です。
動画内でお話してましたが、その4の放送の際に行った場所までのソースコードをブロマガにアップしておきます。
「動画みる時間無いけどちょっと試してみたい!」って方なんかも是非ご利用ください。
いきなり実行された方は色々警告(スプレッドシートへのアクセスと外部へのアクセス)が表示されると思いますので、ご自身の判断で承諾をお願い致します。


function getLivePage() {
  var url = "http://ch.nicovideo.jp/mentalist/live";
  var response = UrlFetchApp.fetch(url);
  return response.getContentText();
}

function subPastParser(htmlText) {
  // 一致する文字列が返る
  return htmlText.match(/<section class=\"sub past\">([\s\S]*?)<\/section>/m)[1];
}

function liveItemParser(htmlText) {
  // 一致する文字列の"配列"が返る
  return htmlText.match(/<div class=\"item_right\">[\s\S]*?<\/div>/gm);
}

function getLiveInfo(htmlText) {
  var returnObject = {
    /*
    lv_name: {title: "オックスフォードからお届け", date: "2018/08/08", dayOfWeek: "水", time: "20:00:00"},
    */
  };
  var liveInfoArray = liveItemParser(htmlText);
 
  for(var i = 0; i < liveInfoArray.length; i++){
    var liveName = liveInfoArray[i].match(/<a href=\"http:\/\/live.nicovideo.jp\/gate\/([\s\S]*?)\">/)[1];
    returnObject[liveName] = {title: "オックスフォードからお届け", date: "2018/08/08", dayOfWeek: "水", time: "20:00:00"};
  }
 
  Logger.log(returnObject);
 
  return returnObject;
}

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var headerArray = ["live name", "title", "date", "day of week", "time"];
 
  sheet.appendRow(headerArray);
 
  var text = getLivePage();
  var subPastText = subPastParser(text);
  getLiveInfo(subPastText);
}
64d52c1e2c4af56020fa72a03c44e6e3978cfb54

どうも、靖宗です。
生放送サボりまくりですみません!月曜あたりには放送したいなぁ

さて、昨日2018年7月21日に電気工事士二種試験の技能試験を受けてきました。
この電気工事士というのは、家庭などの電気設備の工事をする際に必要な資格です。これ無しで勝手にコンセントとか増設しちゃうと怒られます。(電気工事士法というものがあるそうで・・・)

このチャンネルではまずプログラムなどライトな所から紹介したいとは思いますが、ゆくゆくは「理想のスマートホームがない?なら作っちまおうぜ!」という発想が生まれるぐらいには色々紹介したいのです。ですので、割とこの資格は必要不可欠・・・

で、受けた感想ですが多分技能試験はダメだった気がします!
(時間不足で直せなかった欠陥が2箇所ほど・・・)
普通に練習不足ですね。興味がある人はきっちり練習していきましょう。
ただし、おそらく世間に出回っている練習キット全部やるほど練習しなくていい気がします。
今回も正直「ぎりぎり間に合わなかった」という感じだったのでランプレセプタクルと
VVFケーブル同士の結線(差し込み型コネクタ、リングスリーブ)あたりを
1~2回練習しておけばあとは動画学習でいい気がします。

正直実技対策の本も要らなかったです。
というかHOZANさんの「電工試験の虎」というサイトが優秀過ぎます。
ミニマムの費用で挑戦するならこのサイト+工具+ホームセンターで上記に書いた
練習(ランプレセプタクル+VVFケーブル+差し込み型コネクタ、リングスリーブ)
でも良さそうですね。

そのうち筆記のこととかも書くかもしれません。


”技術”を使って楽してみた

同じ作業、何度も繰り返してませんか? このチャンネルでは、プログラミングや電子工作をいままでやったことのない人にどういったことができるのかを紹介していきます。 こういった「技術」は奥が深いモノではあるのですが、実は”少し”知っているだけで生活のいろいろな場面で活用することができます。その”少し”の情報を提供していきたいと考えています。 月額課金のチャンネルにしていますが、基本的に無料枠+有料枠でチャンネルを継続していきたいと思いますので、まずはフォローしていただいて無料枠で見てもらえれば嬉しいです。 有料枠ではお伝えしてる内容の応用やそもそもの情報の集め方などもお話する予定ですので是非ご登録下さい!

著者イメージ

靖宗

社会不適合者な自分に気づき、たぶん雇ってもらえないし幸せになれないので大学卒業後に起業。実験装置やロボットの開発、企業向けシステムの開発やインフラ整備、シミュレーションシステムのポスト処理(レンダリングやデータ解析)などに携わる。

メール配信:あり更新頻度:不定期※メール配信はチャンネルの月額会員限定です