Skip to content

evex-dev/cookpad-cobol

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cookpad-cobol

Cookpad の非公式 COBOL クライアント。 cookpad-py を COBOL にリライトした。

HTTP は libcurl (C ブリッジ経由)、JSON は cJSON (C ブリッジ経由) を使ってる。

ビルド

1. GnuCOBOL をインストール

MSYS2 UCRT64 シェルで:

pacman -S --noconfirm mingw-w64-ucrt-x86_64-gnucobol
cobc --version

2. ビルド・実行

cd cobol/
make
./cookpad_demo.exe

構成

cobol/
├── src/
│   ├── COOKPAD-CONSTANTS.cbl  # 定数 (constants.py)
│   ├── COOKPAD-TYPES.cbl      # データ構造 (types.py dataclass)
│   ├── COOKPAD-HTTP.cbl       # HTTP クライアント (client.py _request)
│   ├── COOKPAD-PARSE.cbl      # JSON パーサー (types.py parse_*)
│   ├── COOKPAD-API.cbl        # 公開 API (client.py メソッド群)
│   ├── DEMO.cbl               # デモプログラム
│   ├── http_bridge.c          # libcurl C ブリッジ
│   └── json_bridge.c          # cJSON C ブリッジ
├── cjson/                     # cJSON ライブラリ(同梱)
├── Makefile
└── README.md

API

COOKPAD-SEARCH

レシピ検索。CALL で呼ぶ。

CALL "COOKPAD-SEARCH" USING
    WS-QUERY        *> PIC X(256)  検索キーワード
    WS-PAGE         *> PIC 9(5)   ページ番号
    WS-PER-PAGE     *> PIC 9(3)   1ページの件数
    WS-SEARCH-RESP  *> 検索レスポンス構造体(出力)
    WS-ERR-CODE.    *> PIC 9(3)   エラーコード(出力)

IF WS-ERR-CODE = 0
    DISPLAY WS-SR-TOTAL-COUNT
    PERFORM VARYING WS-IDX FROM 1 BY 1
        UNTIL WS-IDX > WS-SR-COUNT
        DISPLAY WS-SR-TITLE(WS-IDX)
    END-PERFORM
END-IF.

COOKPAD-GET-RECIPE

レシピ詳細を取得。

CALL "COOKPAD-GET-RECIPE" USING
    WS-RECIPE-ID    *> PIC 9(10)  レシピ ID
    WS-RECIPE       *> レシピ構造体(出力)
    WS-ERR-CODE.    *> PIC 9(3)   エラーコード(出力)

IF WS-ERR-CODE = 0
    DISPLAY WS-RCP-TITLE
    DISPLAY WS-RCP-USER-NAME
END-IF.

COOKPAD-SEARCH-USERS

ユーザー検索。

CALL "COOKPAD-SEARCH-USERS" USING
    WS-QUERY
    WS-PAGE
    WS-PER-PAGE
    WS-USERS-RESP
    WS-ERR-CODE.

エラーコード

Python 版の例外クラスに対応する 88 レベル条件名。

01 WS-ERROR-CODE  PIC 9(3).
   88 COOKPAD-OK            VALUE 0.
   88 COOKPAD-AUTH-ERROR    VALUE 401.
   88 COOKPAD-NOT-FOUND     VALUE 404.
   88 COOKPAD-RATE-LIMIT    VALUE 429.
   88 COOKPAD-API-ERROR     VALUE 400.
   88 COOKPAD-NET-ERROR     VALUE 999.

Python 版との比較

Python COBOL
@dataclass 01 WS-xxx. 05 ... (PIC 句)
async/await 同期(COBOL に非同期なし)
parse_recipe(data) CALL "COOKPAD-PARSE-RECIPE"
raise NotFoundError MOVE 404 TO LK-ERR
import json CALL "JSON-PARSE"
requests.get(url) CALL "COOKPAD-HTTP"

ライセンス

The Unlicense (パブリックドメイン)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors