3 个版本 (1 个稳定版)
1.0.0 | 2021年6月10日 |
---|---|
0.1.1 | 2021年5月30日 |
0.1.0 | 2021年5月29日 |
#21 in #recipe
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