NAME
    App::CekBpom - Check registered products & manufacturers (CLIs for
    cekbpom.pom.go.id)

VERSION
    This document describes version 0.022 of App::CekBpom (from Perl
    distribution App-CekBpom), released on 2022-05-26.

DESCRIPTION
    See included script cek-bpom-products and cek-bpom-manufacturers.

FUNCTIONS
  cek_bpom_products
    Usage:

     cek_bpom_products(%args) -> [$status_code, $reason, $payload, \%result_meta]

    Search BPOM products via https://cekbpom.pom.go.id/.

    Examples:

    *   By default search against name (nama_produk) and brand (merk):

         cek_bpom_products(queries => ["hichew", "hi-chew", "hi chew"]);

    Uses LWP::UserAgent::Plugin so you can add retry, caching, or additional
    HTTP client behavior by setting "LWP_USERAGENT_PLUGINS" environment
    variable.

    This function is not exported by default, but exportable.

    Arguments ('*' denotes required arguments):

    *   get_product_detail => *bool*

        For each product (search result), fetch the detail. This currently
        fetches the manufacturer ("produsen"), which is not displayed by the
        search result page. Note that this requires a separate HTTP request
        for each product so can potentially take a long time and might get
        you banned. Suggestions include: (1) searching without this option
        first to find out the number of results, then search again with this
        option if you need it; (2) use LWP::UserAgent::Plugin::Delay to
        throttle your HTTP requests.

    *   note => *str*

        Add note.

        This will not be sent as queries, but will be added to the log file
        if log file is specified, as well as added to the result dump file
        name, in encoded form.

    *   queries* => *array[str]*

    *   query_log_file => *filename*

        Log queries to log file.

        If specified, each invocation of this utility will be logged into a
        line in the specified file path, in TSV format. Tab character in the
        query will be converted into 4 spaces, to avoid clash with the use
        of Tab as field separator.

        For example, this invocation:

         % cek-bpom-products "minuman susu fermentasi" yakult --query-log-file /some/path.txt

        Sample log line:

         time:2020-10-22T01:02:03.000Z    queries:minuman susu fermentasi,yakult    search_types:merk,nama_produk    num_results:51    duration:3.402

    *   result_dump_dir => *dirname*

        Dump result to directory.

        If specified, will dump full enveloped result to a file in specified
        directory path, in JSON format. The JSON formatting makes it easy to
        grep each row. The file will be named
        "cek-bpom-products-result.<encoded-timestamp>.<search-types-encoded>
        .<queries-encoded>(.<note-encoded>)?.json". The encoded timestamp is
        ISO 8601 format with colon replaced by underscore. The encoded query
        will replace all every group of "unsafe" characters in query with a
        single dash. The same goes with encoded note, which comes from the
        "note" argument. For example, this invocation:

         % cek-bpom-products "minuman susu fermentasi" yakult --note "some note"

        will result in a result dump file name like:
        "cek-bpom-products-result.2020-10-22T01_02_03.000Z.merk-nama_produk.
        minuman-susu-fermentasi-yakult.some-note.json".

    *   search_types => *array[str]*

        Select what field(s) to search against.

        By default, if not specified, will search against product name
        ("nama_produk") and brand ("merk"). If you specify multiple times,
        it will search against all those types, e.g.:

         --search-type nama_produk --search-type nama_pendaftar

        or:

         --nama-produk --nama-pendaftar

        Note: the mobile app version allows you to search for products by
        original manufacturer ("produsen") as well, which is not available
        in the website version. The website allows you to search for
        producers ("sarana") by name/address/city/province/country, though,
        and lets you view what products are registered for that producer.

        This utility will allow you to fetch the detail of each product,
        including manufacturer (see "--get-product-detail" option).

    Returns an enveloped result (an array).

    First element ($status_code) is an integer containing HTTP-like status
    code (200 means OK, 4xx caller error, 5xx function error). Second
    element ($reason) is a string containing error message, or something
    like "OK" if status is 200. Third element ($payload) is the actual
    result, but usually not present when enveloped result is an error
    response ($status_code is not 2xx). Fourth element (%result_meta) is
    called result metadata and is optional, a hash that contains extra
    information, much like how HTTP response headers provide additional
    metadata.

    Return value: (any)

HOMEPAGE
    Please visit the project's homepage at
    <https://metacpan.org/release/App-CekBpom>.

SOURCE
    Source repository is at <https://github.com/perlancar/perl-App-CekBpom>.

SEE ALSO
    <https://cekbpom.pom.go.id/>

AUTHOR
    perlancar <perlancar@cpan.org>

CONTRIBUTING
    To contribute, you can send patches by email/via RT, or send pull
    requests on GitHub.

    Most of the time, you don't need to build the distribution yourself. You
    can simply modify the code, then test via:

     % prove -l

    If you want to build the distribution (e.g. to try to install it locally
    on your system), you can install Dist::Zilla,
    Dist::Zilla::PluginBundle::Author::PERLANCAR, and sometimes one or two
    other Dist::Zilla plugin and/or Pod::Weaver::Plugin. Any additional
    steps required beyond that are considered a bug and can be reported to
    me.

COPYRIGHT AND LICENSE
    This software is copyright (c) 2022, 2021, 2020 by perlancar
    <perlancar@cpan.org>.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.

BUGS
    Please report any bugs or feature requests on the bugtracker website
    <https://rt.cpan.org/Public/Dist/Display.html?Name=App-CekBpom>

    When submitting a bug or request, please include a test-file or a patch
    to an existing test-file that illustrates the bug or desired feature.