#recipe #api-bindings #paprika

paprika-api

A Rust 对 Paprika 3 食谱管理 API 的包装:https://www.paprikaapp.com

3 个版本 (1 个稳定版)

1.0.0 2021年6月10日
0.1.1 2021年5月30日
0.1.0 2021年5月29日

#21 in #recipe

MIT 许可证

23KB
313

辣椒 API

A Rust 对 Paprika 3 食谱管理 API 的包装:https://www.paprikaapp.com/

稳定性

Paprika 没有发布他们的 API,并且它可能随时更改。如果出现问题,请在仓库中提交问题。

使用方法

包含库

use paprika_api::api;

生成登录令牌

let res = api::login(&email, &password).await;
match res {
    Ok(t) => {
        println!("Yay! Token: {}", t.token);
        Ok(t.token)
    }
    Err(e) => Err(e.into()),
}

paprika-api 不缓存登录令牌。使用 paprika-api 的应用程序必须自行缓存令牌。

获取并打印所有食谱

async fn list_recipes(token: &str) {
    let recipe_list = api::get_recipes(&token).await.unwrap();

    for (_, recipe_entry) in recipe_list.iter().enumerate() {
        let recipe_future = api::get_recipe_by_id(&token, &recipe_entry.uid).await;
        match recipe_future {
            Ok(recipe) => println!("Recipe: {:?}", recipe),
            Err(e) => println!("Error fetching recipe {}: {}", recipe_entry.uid, e),
        }
    }
}

更新现有食谱

async fn update_recipe(token: &str, id: &str) {
    let mut recipe = api::get_recipe_by_id(&token, &id)
        .await
        .unwrap();

    recipe.name = String::from("Updated recipe");
    let success = api::upload_recipe(&token, &mut recipe).await.unwrap();

    if success {
        let recipe_after_edit = api::get_recipe_by_id(&token, &recipe.uid).await.unwrap();
        println!("Edited recipe: \n{:?}", recipe_after_edit);
    } else {
        println!("Failed to update recipe");
    }
}

创建新食谱
重要提示: Paprika 对一些字段进行验证。我还不确定他们具体验证什么。如果食谱创建失败,可能是因为字段中有无效数据。以下是一个示例

async fn create_recipe(token: &str) {
    let mut recipe = api::Recipe {
        uid: "".into(),
        name: "Birria tacos".into(),
        ingredients: "None!".into(),
        directions: "None!".into(),
        description: "None!".into(),
        notes: "".into(),
        nutritional_info: "".into(),
        servings: "".into(),
        difficulty: "".into(),
        prep_time: "".into(),
        cook_time: "".into(),
        total_time: "".into(),
        source: "acozykitchen.com".into(),
        source_url: Some("https://www.acozykitchen.com/birria-tacos".into()),
        image_url: Some("https://www.acozykitchen.com/wp-content/uploads/2021/01/BirriaTacos-11-1227x1536-2-500x500.jpg".into()),
        photo: Some("CB5F52D6-74FF-499D-8793-5FFC8190C6DC.jpg".into()),
        photo_hash: Some("36E72B4585E7ECD10AC6EF5B331789E7004BDB1F9607BC22BE27759CDD143FB6".into()),
        photo_large: None,
        scale: None,
        hash: "".into(),
        categories: vec!(),
        rating: 1,
        in_trash: false,
        is_pinned: false,
        on_favorites: false,
        on_grocery_list: false,
        created: "2021-04-09 15:09:26".into(),
        photo_url: Some("photo".into()),
    };

    recipe.uid = "".into();

    let success = api::upload_recipe(&token, &mut recipe).await.unwrap();

    if success {
        // `upload_recipe` generates a UID for us
        let recipe_after_upload = api::get_recipe_by_id(&token, &recipe.uid).await.unwrap();
        println!("New recipe: \n{:?}", recipe_after_upload);
    } else {
        println!("Failed to create recipe");
    }
}

使用方法:所有请求(除 login 外),都需要从 login 函数生成的 token

要更新现有食谱,首先获取它(使用 get_recipe_by_id,其中 id 是从 get_recipes 返回的食谱列表中找到的)。然后编辑该食谱并使用相同的 id 上传。

要创建新食谱,调用 upload_recipe 并传递一个已填充的 Recipe,其 uid 字段为空。将为它生成一个新的 uid

依赖项

~10–24MB
~382K SLoC