Skip to content
TypeScript Shell JavaScript
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows Add build test in CI Jan 7, 2020
src
test Refactor Pager and make it a generic class Jan 13, 2020
.eslintrc.js init Dec 29, 2019
.gitignore Fix coverage report Jan 7, 2020
.npmignore Add npmignore Dec 29, 2019
LICENSE Add LICENSE Jan 6, 2020
README.md Add badges! Jan 7, 2020
package-lock.json Add nyc Jan 7, 2020
package.json Fix coverage report Jan 7, 2020
tsconfig.json init Dec 29, 2019

README.md

ホットクック レシピ検索 パッケージ

npm version Node CI Coverage Status

ホットクックの公式レシピ検索サイトを楽にスクレイピングするAPIを提供します。

インストール

$ npm install @mecab/hotcook

以下の環境を想定しています

  • Node.js >= v.10.0.0
  • TypeScript での利用を推奨します。(型定義ファイルを用意してあり、特に検索時のオプションの指定が便利です。)

使い方

1. レシピを検索する

1.1 簡単な例

import { Hotcook } from '@mecab/hotcook';
// const { Hotcook } = require('@mecab/hotcook');

(async () => {
    const hotcook = new Hotcook('HW24C'); // 省略した場合、デフォルトはHW24Cです。
    const result = hotcook.search('じゃがいも');
    for await (const recipe of result) {
        console.log(recipe);
    }
})();

// {
// url: 'https://cook-healsio.jp/hotcook/HW24C/recipes/R4086',
// imageUrl: 'https://cook-healsio.jp/hotcook/asset/images/search/img_recipe_pc.png',
// name: 'いも・かぼちゃ(ゆで)',
// id: 'R4086'
// }
// {
// url: 'https://cook-healsio.jp/hotcook/HW24C/recipes/R4012',
// imageUrl: 'https://cook-healsio.jp/hotcook/asset/images/search/img_recipe_pc.png',
// name: 'おでん',
// id: 'R4012'
// }
// ...
// {
// url: 'https://cook-healsio.jp/hotcook/HW24C/recipes/R4080',
// imageUrl: 'https://cook-healsio.jp/hotcook/asset/images/search/img_recipe_pc.png',
// name: '野菜スープ',
// id: 'R4080'
// }

レシピの検索結果を返すイテレーターを返します。このイテレーターは、必要に応じて後ろのページを自動的に取得します。すなわち、for await 文で最後まで反復させると、ページをまたいで最後のレシピまで全て取得します。

結果のレシピ名が長い場合(1.3., 1.4. 参照)省略されてしまいますが、検索結果ページのHTML上で結果が省略されているので、元のレシピ名を取得することはできません。完全なレシピ名が必要な場合、2. のレシピ詳細を取得してください。

1.2. 完全なオプション

import { Hotcook } from '@mecab/hotcook';

(async () => {
    const hotcook = new Hotcook();
    const result = hotcook.search('じゃがいも', {
        kind: ['ゆで物', '煮物'],
        time: ['30分未満', '30分以上1時間未満', '1時間以上'],
        materials: ['大根・にんじん'],
        reservationCapable: true
    });
    for await (const recipe of result) {
        console.log(recipe.name);
    }
})();

// おでん
// 豚バラ肉と野菜の煮物

クエリをオプションに含めて、

hotcook.search({
    query: 'じゃがいも',
    kind: ['ゆで物', '煮物'],
    ...
})

としても良いです。全てのオプションは省略できます。オプションとして利用できる値は、公式の検索ページで利用できる値そのままです。詳しくは型定義ファイルをご覧ください。

1.3. 最大ページ数を指定

import { Hotcook } from '@mecab/hotcook';

(async () => {
    const hotcook = new Hotcook();
    const result = hotcook.search('じゃがいも').maxPage(1);
    for await (const recipe of result) {
        console.log(recipe.name);
    }
})();

// いも・かぼちゃ(ゆで)
// おでん
// かぼちゃのポテトサラ...
// 殻付きあさりのクラム...
// キャベツとじゃがいも...
// クラムチャウダー
// クリームシチュー
// コクうまカムジャタン...
// ごろっと具材のクリー...
// じゃがいもと牛肉の中...
// じゃがいもとれんこん...
// じゃがいもの甘辛炒め

1.4. 特定のページのみを取得

import { Hotcook } from '@mecab/hotcook';

(async () => {
    const hotcook = new Hotcook();
    const result = hotcook.search('じゃがいも');
    for (const recipe of await result.getPage(2)) { // awaitの位置に注意
        console.log(recipe.name);
    }
})();

// じゃがいものポタージ...
// じゃがいものみそシチ...
// じゃがいもの冷製スー...
// 卵入りポテトサラダ
// 大豆のミネストローネ...
// トマトたっぷりビーフ...
// 鶏とじゃがいもの炒め...
// 肉じゃが
// バターチキンカレー(...
// ビーフカレー
// ビーフシチュー
// 豚バラ肉と野菜の煮物

hotcook.search() が返すイテレータには、getPage(page: Number) メソッドがあります。このメソッドは、指定されたページ上のレシピ一覧を取得し、その配列に解決されるPromiseを返します。

2. レシピの詳細を取得する

import { Hotcook } from '@mecab/hotcook';

(async () => {
    const hotcook = new Hotcook();
    const recipe = await hotcook.recipe('R4006'); // 検索結果の`recipe.id`
    console.log(recipe);
    console.log();
    console.log('materials')
    recipe.recipe.materials.forEach(e => {
        console.log(`=== ${e.title ?? ''} ===`);
        console.log(e.materials);
    })
})();

// {
// url: 'https://cook-healsio.jp/hotcook/HW24C/recipes/R4006',
// recipe: {
//     title: '八宝菜',
//     materialTitle: '材料:4人分',
//     materials: [ [Object], [Object] ],
//     time: '20分',
//     calorie: '約119kcal',
//     note: '*4~6人分まで自動でできます。',
//     process: [
//     'まぜ技ユニットを本体にセットする。',
//     'えびは殻、尾、背ワタを取る。肉・魚介類に片栗粉をまぶす。にんじんは短冊切りにする。その他の食材はひと口大に切る。',
//     '内鍋に野菜、肉・魚介類の順に入れ、よく混ぜ合わせた[A]を加えて本体にセットする。\n' +
//         'メニューを選ぶ → メニュー番号で探す → No.006(八宝菜) → 調理を開始する → ' +
//         'スタート',
//     ' 加熱後、全体を混ぜる。\n※写真は、加熱後にゆでたうずら卵を加えています。'
//     ],
//     recipeNumber: '自動6',
//     imageUrl: 'https://cook-healsio.jp/hotcook/images/800x600/R4006.jpg'
// }
// }
//
// materials
// ===  ===
// [
// { name: '肉・魚介類 (豚、えび、いかなど)', amount: '250g' },
// { name: '片栗粉', amount: '大さじ2' },
// { name: '緑黄色野菜 (ピーマン、パプリカ、にんじんなど)', amount: '300g' },
// { name: '白菜', amount: '300g' }
// ]
// === A ===
// [
// { name: '酒', amount: '大さじ4' },
// { name: '薄口しょうゆ', amount: '小さじ2' },
// { name: '鶏がらスープの素(顆粒)', amount: '小さじ2' },
// { name: '塩、こしょう', amount: '各少々' }
// ]
You can’t perform that action at this time.