{"id":30383,"date":"2023-09-01T17:16:44","date_gmt":"2023-09-01T11:46:44","guid":{"rendered":"https:\/\/copyassignment.com\/?p=30383"},"modified":"2023-09-07T12:45:52","modified_gmt":"2023-09-07T07:15:52","slug":"farmers-ecommerce-app-using-python-tkinter","status":"publish","type":"post","link":"https:\/\/copyassignment.com\/farmers-ecommerce-app-using-python-tkinter\/","title":{"rendered":"Farmers Ecommerce App using Python Tkinter"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p>Hello friends, I will show you how to create a simple e-commerce app for farmers using Python and the tkinter library in this tutorial. Before anything, let me tell you that this is not a real e-commerce app where anyone can list and buy products like we do on Amazon or Flipkart.<br>Technologies used-> <strong><a href=\"https:\/\/www.python.org\/\">Python<\/a><\/strong>, <strong><a href=\"https:\/\/docs.python.org\/3\/library\/tkinter.html\">tkinter<\/a><\/strong>, and <strong><a href=\"https:\/\/pypi.org\/project\/mysql-connector-python\/\">MySQL<\/a><\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Working of Farmers Ecommerce App<\/h2>\n\n\n\n<p>If you run this project, you will be shown a login screen where you must log in as a farmer or customer.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"502\" height=\"411\" data-src=\"https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image.png\" alt=\"login screen of farmer ecommerce app\" class=\"wp-image-30385 lazyload\" data-srcset=\"https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image.png 502w, https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image-300x246.png 300w\" data-sizes=\"(max-width: 502px) 100vw, 502px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 502px; --smush-placeholder-aspect-ratio: 502\/411;\" \/><\/figure>\n<\/div>\n\n\n<p>If you have not registered yet, you can register as a farmer or customer.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"501\" height=\"416\" data-src=\"https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image-1.png\" alt=\"registration screen of farmer ecommerce app\" class=\"wp-image-30386 lazyload\" data-srcset=\"https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image-1.png 501w, https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image-1-300x249.png 300w\" data-sizes=\"(max-width: 501px) 100vw, 501px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 501px; --smush-placeholder-aspect-ratio: 501\/416;\" \/><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">Farmer Side working<\/h3>\n\n\n\n<p>Once you log in as a farmer you will have 2 options- <strong>Add product<\/strong> or <strong>logout<\/strong>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"491\" height=\"350\" data-src=\"https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image-2.png\" alt=\"home screen for farmer\" class=\"wp-image-30387 lazyload\" data-srcset=\"https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image-2.png 491w, https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image-2-300x214.png 300w\" data-sizes=\"(max-width: 491px) 100vw, 491px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 491px; --smush-placeholder-aspect-ratio: 491\/350;\" \/><\/figure>\n<\/div>\n\n\n<p>If you click on the <strong>Add Product<\/strong> button, you will see the details you need to fill in to add the product.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"564\" height=\"479\" data-src=\"https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image-3.png\" alt=\"add product screen\" class=\"wp-image-30388 lazyload\" data-srcset=\"https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image-3.png 564w, https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image-3-300x255.png 300w\" data-sizes=\"(max-width: 564px) 100vw, 564px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 564px; --smush-placeholder-aspect-ratio: 564\/479;\" \/><\/figure>\n<\/div>\n\n\n<p>If you click on <strong>logout<\/strong>, you will be logged out and a login screen will open.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">User side working<\/h3>\n\n\n\n<p>If you log in as a user, then there are two types of users, <strong>normal user<\/strong> and <strong>company<\/strong>. You will see the listed products if you log in as a normal user or company(I have not done the coding part for the company, you can do that yourself).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"909\" height=\"521\" data-src=\"https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image-4.png\" alt=\"home screen for normal user\" class=\"wp-image-30390 lazyload\" data-srcset=\"https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image-4.png 909w, https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image-4-300x172.png 300w, https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image-4-768x440.png 768w, https:\/\/copyassignment.com\/wp-content\/uploads\/2023\/09\/image-4-675x387.png 675w\" data-sizes=\"(max-width: 909px) 100vw, 909px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 909px; --smush-placeholder-aspect-ratio: 909\/521;\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Complete code for Farmers Ecommerce App using Python Tkinter<\/h2>\n\n\n\n<div style=\"height: 250px; position:relative; margin-bottom: 50px;\" class=\"wp-block-simple-code-block-ace\"><div style=\"position:absolute;top:-20px;right:0px;cursor:pointer\" class=\"copy-simple-code-block\"><span class=\"dashicon dashicons dashicons-admin-page\"><\/span><\/div><pre class=\"wp-block-simple-code-block-ace\" style=\"position:absolute;top:0;right:0;bottom:0;left:0\" data-mode=\"python\" data-theme=\"xcode\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\" data-copy=\"true\">import tkinter as tk\nfrom tkinter import messagebox\nimport mysql.connector\nfrom tkinter import ttk\n\ndef get_database_connection():\n    return mysql.connector.connect(\n        host=\"localhost\",\n        user=\"yourusername\",\n        password=\"yourpassword\",\n        database=\"myfarmers\"\n    )\n    \n\ndef create_database():\n    try:\n        connection = get_database_connection()\n        cursor = connection.cursor()\n\n        # Create the new database\n        sql = \"CREATE DATABASE IF NOT EXISTS myfarmers\"\n        # cursor.execute(\"SHOW DATABASES\")\n        cursor.execute(sql)\n\n        # for x in cursor:\n        #     print(x)\n\n        cursor.close()\n        connection.close()\n\n    except mysql.connector.Error as error:\n        print(f\"Error creating database: {error}\")\n        \ndef create_users_table():\n    try:\n        connection = get_database_connection()\n        cursor = connection.cursor()\n\n        sql = \"\"\"\n        CREATE TABLE IF NOT EXISTS users (\n            id INT AUTO_INCREMENT PRIMARY KEY,\n            username VARCHAR(255) NOT NULL,\n            password VARCHAR(255) NOT NULL,\n            user_type VARCHAR(80) NOT NULL\n        )\n        \"\"\"\n        cursor.execute(sql)\n\n        cursor.close()\n        connection.close()\n\n    except mysql.connector.Error as error:\n        print(f\"Error creating 'users' table: {error}\")\n\ndef create_products_table():\n    try:\n        connection = get_database_connection()\n        cursor = connection.cursor()\n\n        sql = \"\"\"\n        CREATE TABLE IF NOT EXISTS products (\n            farmername VARCHAR(255) NOT NULL,\n            phone INT NOT NULL,\n            id INT AUTO_INCREMENT PRIMARY KEY,\n            title VARCHAR(255) NOT NULL,\n            description VARCHAR(1000) NOT NULL,\n            quantity DECIMAL(10, 2) NOT NULL,\n            expiry_date DATE NOT NULL,\n            price DECIMAL(10, 2) NOT NULL\n        )\n        \"\"\"\n        # sql = \"DROP TABLE products\"\n        cursor.execute(sql)\n\n        cursor.close()\n        connection.close()\n\n    except mysql.connector.Error as error:\n        print(f\"Error creating 'products' table: {error}\")\n\n\n# Function to handle login button click\ndef login():\n    global username, password, user_type\n    username = username_entry.get()\n    password = password_entry.get()\n    user_type = user_type_var.get()\n\n    # Implement your MySQL database login verification here\n    # Use the username, password, and user_type to check the database\n    # and validate the login credentials.\n    # For simplicity, let's assume the validation always passes for now.\n\n    try:\n        connection = get_database_connection()\n        cursor = connection.cursor()\n\n        # Fetch user data from the database based on the entered username and user_type\n        sql = \"SELECT password FROM users WHERE username = %s AND password = %s\"\n        values = (username, password)\n        cursor.execute(sql, values)\n        result = cursor.fetchone()\n        print(\"None->\", result)\n\n        if result != None:\n            if user_type == \"Farmer\":\n                farmer_home_screen()\n            elif user_type == \"Normal User\":\n                normal_user_screen()\n            elif user_type == \"Company\":\n                company_screen()\n\n        else:\n            messagebox.showerror(\"Login Failed\", \"User not found. Please register first.\")\n            register_screen()\n\n        cursor.close()\n        connection.close()\n\n    except mysql.connector.Error as error:\n        messagebox.showerror(\"Login Error\", f\"Error during login: {error}\")\n\n# Function to handle registration button click\ndef register():\n    username = username_entry.get()\n    password = password_entry.get()\n    user_type = user_type_var.get()\n    \n    if(len(username)&lt;4 or len(password)&lt;8):\n        messagebox.showerror(\"Registration failed\",\"username should be at least 4 characters long and password should be at least 8 characters long\")\n        register_screen()\n        return\n\n    # Implement your MySQL database registration logic here\n    # Use the username, password, and user_type to insert the new user\n    # into the database.\n    # For simplicity, let's assume the registration always succeeds for now.\n    # Connect to the MySQL database\n    try:\n        connection = get_database_connection()\n        cursor = connection.cursor()\n\n        # Insert the user data into the database\n        sql = \"INSERT INTO users (username, password, user_type) VALUES (%s, %s, %s)\"\n        values = (username, password, user_type)\n        cursor.execute(sql, values)\n\n        connection.commit()\n        cursor.close()\n        connection.close()\n\n        messagebox.showinfo(\"Registration Successful\", \"Registration successful! Please log in.\")\n        login_screen()\n\n    except mysql.connector.Error as error:\n        messagebox.showerror(\"Registration Error\", f\"Error during registration: {error}\")\n        register_screen()\n\n    login_screen()\n\n# Function to create and display the login screen\ndef login_screen():\n    clear_screen()\n    label = tk.Label(root, text=\"Login Screen\")\n    label.pack()\n\n    username_label = tk.Label(root, text=\"Username\")\n    username_label.pack()\n    global username_entry\n    username_entry = tk.Entry(root)\n    username_entry.pack()\n\n    password_label = tk.Label(root, text=\"Password\")\n    password_label.pack()\n    global password_entry\n    password_entry = tk.Entry(root, show=\"*\")\n    password_entry.pack()\n\n    user_type_label = tk.Label(root, text=\"User Type\")\n    user_type_label.pack()\n    global user_type_var\n    user_type_var = tk.StringVar(root)\n    user_type_var.set(\"Farmer\")  # Default value\n    user_type_options = [\"Farmer\", \"Normal User\", \"Company\"]\n    user_type_dropdown = tk.OptionMenu(root, user_type_var, *user_type_options)\n    user_type_dropdown.pack()\n\n    login_button = tk.Button(root, text=\"Login\", command=login)\n    login_button.pack()\n\n    register_button = tk.Button(root, text=\"Register\", command=register_screen)\n    register_button.pack()\n\n# Function to create and display the registration screen\ndef register_screen():\n    clear_screen()\n    label = tk.Label(root, text=\"Registration Screen\")\n    label.pack()\n\n    username_label = tk.Label(root, text=\"Username\")\n    username_label.pack()\n    global username_entry\n    username_entry = tk.Entry(root)\n    username_entry.pack()\n\n    password_label = tk.Label(root, text=\"Password\")\n    password_label.pack()\n    global password_entry\n    password_entry = tk.Entry(root, show=\"*\")\n    password_entry.pack()\n\n    user_type_label = tk.Label(root, text=\"User Type\")\n    user_type_label.pack()\n    global user_type_var\n    user_type_var = tk.StringVar(root)\n    user_type_var.set(\"Farmer\")  # Default value\n    user_type_options = [\"Farmer\", \"Normal User\", \"Company\"]\n    user_type_dropdown = tk.OptionMenu(root, user_type_var, *user_type_options)\n    user_type_dropdown.pack()\n\n    register_button = tk.Button(root, text=\"Register\", command=register)\n    register_button.pack()\n\ndef save_product():\n    title = title_entry.get()\n    description = description_entry.get()\n    quantity = quantity_entry.get()\n    expiry_date = expiry_entry.get()\n    price = price_entry.get()\n    phone = phonenumber_entry.get()\n\n    try:\n        connection = get_database_connection()\n        cursor = connection.cursor()\n\n        # Insert the product data into the database\n        sql = \"INSERT INTO products (farmername, phone, title, description, quantity, expiry_date, price ) VALUES (%s, %s, %s, %s, %s, %s, %s)\"\n        values = (username, phone, title, description, quantity, expiry_date, price)\n        cursor.execute(sql, values)\n\n        connection.commit()\n        cursor.close()\n        connection.close()\n\n        messagebox.showinfo(\"Product Added\", \"Product has been added successfully!\")\n        farmer_home_screen()\n\n    except mysql.connector.Error as error:\n        messagebox.showerror(\"Product Add Error\", f\"Error adding the product: {error}\")\n\n\ndef farmer_add_product_screen():\n    # print(username, password, user_type)\n    clear_screen()\n    label = tk.Label(root, text=\"Add Product\")\n    label.pack()\n\n    phonenumber = tk.Label(root, text=\"PhoneNumber\")\n    phonenumber.pack()\n    global phonenumber_entry\n    phonenumber_entry = tk.Entry(root)\n    phonenumber_entry.pack()\n    \n    title_label = tk.Label(root, text=\"Title\")\n    title_label.pack()\n    global title_entry\n    title_entry = tk.Entry(root)\n    title_entry.pack()\n\n    description_label = tk.Label(root, text=\"Description\")\n    description_label.pack()\n    global description_entry\n    description_entry = tk.Entry(root)\n    description_entry.pack()\n\n    quantity_label = tk.Label(root, text=\"Quantity (kg)\")\n    quantity_label.pack()\n    global quantity_entry\n    quantity_entry = tk.Entry(root)\n    quantity_entry.pack()\n\n    expiry_label = tk.Label(root, text=\"Expiry Date (YYYY-MM-DD)\")\n    expiry_label.pack()\n    global expiry_entry\n    expiry_entry = tk.Entry(root)\n    expiry_entry.pack()\n\n    price_label = tk.Label(root, text=\"Price\")\n    price_label.pack()\n    global price_entry\n    price_entry = tk.Entry(root)\n    price_entry.pack()\n\n    add_product_button = tk.Button(root, text=\"Add Product\", command=save_product)\n    add_product_button.pack()\n    add_product_button = tk.Button(root, text=\"Logout\", command=login_screen)\n    add_product_button.pack()\n\n\n# Function to create and display the farmer's home screen\ndef farmer_home_screen():\n    clear_screen()\n    label = tk.Label(root, text=\"Welcome to Farmer's Page\")\n    label.pack()\n    add_product_button = tk.Button(root, text=\"Add Product\", command=farmer_add_product_screen)\n    add_product_button.pack()\n    \n    add_product_button = tk.Button(root, text=\"Logout\", command=login_screen)\n    add_product_button.pack()\n\n# Function to create and display the normal user screen\ndef normal_user_screen():\n    clear_screen()\n    root.geometry('1100x400')\n    label = tk.Label(root, text=\"Normal User Screen - Products List\")\n    label.pack()\n\n    try:\n        connection = get_database_connection()\n        cursor = connection.cursor()\n\n        # Fetch all products from the database\n        sql = \"SELECT farmername, phone, title, description, quantity, expiry_date, price FROM products\"\n        cursor.execute(sql)\n        products = cursor.fetchall()\n\n        # Create a Treeview widget to display products in a table-like format\n        tree = ttk.Treeview(root, columns=(\"FarmerName\", \"Phone\", \"Title\", \"Description\", \"Quantity\", \"Expiry Date\", \"Price\"), show=\"headings\")\n\n        # Add headings to the columns\n        tree.heading(\"FarmerName\", text=\"FarmerName\")\n        tree.heading(\"Phone\", text=\"Phone\")\n        tree.heading(\"Title\", text=\"Title\")\n        tree.heading(\"Description\", text=\"Description\")\n        tree.heading(\"Quantity\", text=\"Quantity\")\n        tree.heading(\"Expiry Date\", text=\"Expiry Date\")\n        tree.heading(\"Price\", text=\"Price\")\n        \n        # setting width\n        tree.column(\"FarmerName\", width=80)\n        tree.column(\"Phone\", width=80)\n        tree.column(\"Title\", width=100)\n        tree.column(\"Description\", width=200)\n        tree.column(\"Quantity\", width=80)\n        tree.column(\"Expiry Date\", width=80)\n        tree.column(\"Price\", width=80)\n\n        # Add products data to the treeview\n        for product in products:\n            tree.insert(\"\", \"end\", values=product)\n\n        tree.pack()\n\n        cursor.close()\n        connection.close()\n\n    except mysql.connector.Error as error:\n        messagebox.showerror(\"Error\", f\"Error fetching products: {error}\")\n    add_product_button = tk.Button(root, text=\"Logout\", command=login_screen)\n    add_product_button.pack()\n\n# Function to create and display the company screen\ndef company_screen():\n    clear_screen()\n    root.geometry('1100x400')\n    label = tk.Label(root, text=\"Company Screen - Products List\")\n    label.pack()\n\n    try:\n        connection = get_database_connection()\n        cursor = connection.cursor()\n\n        # Fetch all products from the database\n        sql = \"SELECT farmername, phone, title, description, quantity, expiry_date, price FROM products\"\n        cursor.execute(sql)\n        products = cursor.fetchall()\n\n        # Create a Treeview widget to display products in a table-like format\n        tree = ttk.Treeview(root, columns=(\"Farmername\", \"Phone\", \"Title\", \"Description\", \"Quantity\", \"Expiry Date\", \"Price\"), show=\"headings\")\n\n        # Add headings to the columns\n        tree.heading(\"Farmername\", text=\"Farmername\")\n        tree.heading(\"Phone\", text=\"Phone\")\n        tree.heading(\"Title\", text=\"Title\")\n        tree.heading(\"Description\", text=\"Description\")\n        tree.heading(\"Quantity\", text=\"Quantity\")\n        tree.heading(\"Expiry Date\", text=\"Expiry Date\")\n        tree.heading(\"Price\", text=\"Price\")\n        \n        # setting width\n        tree.column(\"FarmerName\", width=80)\n        tree.column(\"Phone\", width=80)\n        tree.column(\"Title\", width=120)\n        tree.column(\"Description\", width=200)\n        tree.column(\"Quantity\", width=80)\n        tree.column(\"Expiry Date\", width=80)\n        tree.column(\"Price\", width=80)\n\n        # Add products data to the treeview\n        for product in products:\n            tree.insert(\"\", \"end\", values=product)\n\n        tree.pack()\n\n        cursor.close()\n        connection.close()\n\n    except mysql.connector.Error as error:\n        messagebox.showerror(\"Error\", f\"Error fetching products: {error}\")\n    add_product_button = tk.Button(root, text=\"Logout\", command=login_screen)\n    add_product_button.pack()\n\n\n# Function to clear the screen\ndef clear_screen():\n    for widget in root.winfo_children():\n        widget.destroy()\n\n# Main program\nif __name__ == \"__main__\":\n    root = tk.Tk()\n    root.title(\"Farmer Ecommerce App\")\n    root.geometry(\"400x300\")\n    create_database()\n    create_users_table()\n    create_products_table()\n    login_screen()\n    root.mainloop()<\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Hello friends, I will show you how to create a simple e-commerce app for farmers using Python and the tkinter library in this tutorial&#8230;.<\/p>\n","protected":false},"author":74,"featured_media":30392,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22],"tags":[],"class_list":["post-30383","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-allcategorites","wpcat-22-id"],"_links":{"self":[{"href":"https:\/\/copyassignment.com\/wp-json\/wp\/v2\/posts\/30383","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/copyassignment.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/copyassignment.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/copyassignment.com\/wp-json\/wp\/v2\/users\/74"}],"replies":[{"embeddable":true,"href":"https:\/\/copyassignment.com\/wp-json\/wp\/v2\/comments?post=30383"}],"version-history":[{"count":0,"href":"https:\/\/copyassignment.com\/wp-json\/wp\/v2\/posts\/30383\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/copyassignment.com\/wp-json\/wp\/v2\/media\/30392"}],"wp:attachment":[{"href":"https:\/\/copyassignment.com\/wp-json\/wp\/v2\/media?parent=30383"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/copyassignment.com\/wp-json\/wp\/v2\/categories?post=30383"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/copyassignment.com\/wp-json\/wp\/v2\/tags?post=30383"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}