Skip to content

Bulk Url Import

Info

This guide was submitted by a community member. Find something wrong? Submit a PR to get it fixed!

Recipes can be imported in bulk from a file containing a list of URLs. This can be done using the following bash or python scripts with the list file containing one URL per line.

Bash

#!/bin/bash

function authentication () {
  auth=$(curl -X 'POST' \
    "$3/api/auth/token" \
    -H 'accept: application/json' \
    -H 'Content-Type: application/x-www-form-urlencoded' \
    -d 'grant_type=&username='$1'&password='$2'&scope=&client_id=&client_secret=')

    echo $auth |  sed -e 's/.*token":"\(.*\)",.*/\1/'
}

function import_from_file () {
  while IFS= read -r line
  do
    echo $line
    curl -X 'POST' \
      "$3/api/recipes/create/url" \
      -H "Authorization: Bearer $2" \
      -H 'accept: application/json' \
      -H 'Content-Type: application/json' \
      -d '{"url": "'$line'" }'
    echo
  done < "$1"
}

input="list"
mail="changeme@example.com"
password="MyPassword"
mealie_url=http://localhost:9000


token=$(authentication $mail $password $mealie_url)
import_from_file $input $token $mealie_url

Go

See Jleagle/mealie-importer.

Python

import requests
import re


def authentication(mail, password, mealie_url):
    headers = {
        "accept": "application/json",
        "Content-Type": "application/x-www-form-urlencoded",
    }
    data = {"grant_type": "", "username": mail, "password": password, "scope": "", "client_id": "", "client_secret": ""}
    auth = requests.post(mealie_url + "/api/auth/token", headers=headers, data=data)
    token = re.sub(r'.*token":"(.*)",.*', r"\1", auth.text)
    return token


def import_from_file(input_file, token, mealie_url):
    with open(input_file) as fp:
        for l in fp:
            line = re.sub(r"(.*)\n", r"\1", l)
            print(line)
            headers = {
                "Authorization": "Bearer " + token,
                "accept": "application/json",
                "Content-Type": "application/json",
            }
            data = {"url": line}
            response = requests.post(mealie_url + "/api/recipes/create/url", headers=headers, json=data)
            print(response.text)


input_file = "list"
mail = "changeme@example.com"
password = "MyPassword"
mealie_url = "http://localhost:9000"


token = authentication(mail, password, mealie_url)
import_from_file(input_file, token, mealie_url)