Skip to content

mecab/node-hotcook

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

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: '各少々' }
// ]