<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://lms.onnocenter.or.id/wiki/index.php?action=history&amp;feed=atom&amp;title=OpenWebUI%3A_python_knowledge_PDF_CLI_API_upload</id>
	<title>OpenWebUI: python knowledge PDF CLI API upload - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://lms.onnocenter.or.id/wiki/index.php?action=history&amp;feed=atom&amp;title=OpenWebUI%3A_python_knowledge_PDF_CLI_API_upload"/>
	<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=OpenWebUI:_python_knowledge_PDF_CLI_API_upload&amp;action=history"/>
	<updated>2026-04-26T00:06:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://lms.onnocenter.or.id/wiki/index.php?title=OpenWebUI:_python_knowledge_PDF_CLI_API_upload&amp;diff=72773&amp;oldid=prev</id>
		<title>Unknown user: /* owui-pakai.py */</title>
		<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=OpenWebUI:_python_knowledge_PDF_CLI_API_upload&amp;diff=72773&amp;oldid=prev"/>
		<updated>2025-09-02T01:52:47Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;owui-pakai.py&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 01:52, 2 September 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l164&quot;&gt;Line 164:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 164:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== owui-pakai&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.py &lt;/del&gt;==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== owui-pakai ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  # 0) Set variabel (opsional)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  # 0) Set variabel (opsional)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
	<entry>
		<id>https://lms.onnocenter.or.id/wiki/index.php?title=OpenWebUI:_python_knowledge_PDF_CLI_API_upload&amp;diff=72772&amp;oldid=prev</id>
		<title>Unknown user: Created page with &quot;== owui_upload_kb.py ==   #!/usr/bin/env python3  # -*- coding: utf-8 -*-  &quot;&quot;&quot;  Upload PDF ke Open WebUI Knowledge via API (tanpa GUI).    Fitur:  - Buat knowledge collection...&quot;</title>
		<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=OpenWebUI:_python_knowledge_PDF_CLI_API_upload&amp;diff=72772&amp;oldid=prev"/>
		<updated>2025-09-02T01:50:45Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;== owui_upload_kb.py ==   #!/usr/bin/env python3  # -*- coding: utf-8 -*-  &amp;quot;&amp;quot;&amp;quot;  Upload PDF ke Open WebUI Knowledge via API (tanpa GUI).    Fitur:  - Buat knowledge collection...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== owui_upload_kb.py ==&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/env python3&lt;br /&gt;
 # -*- coding: utf-8 -*-&lt;br /&gt;
 &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
 Upload PDF ke Open WebUI Knowledge via API (tanpa GUI).&lt;br /&gt;
 &lt;br /&gt;
 Fitur:&lt;br /&gt;
 - Buat knowledge collection (jika belum ada)&lt;br /&gt;
 - Upload banyak PDF (folder / list path)&lt;br /&gt;
 - Tambah setiap file ke collection&lt;br /&gt;
 - Anti-duplikat sederhana (skip jika server balas &amp;quot;Duplicate content&amp;quot;)&lt;br /&gt;
 - Uji query RAG terhadap collection (opsional)&lt;br /&gt;
 &lt;br /&gt;
 Dok:&lt;br /&gt;
 - Upload file: POST /api/v1/files/&lt;br /&gt;
 - Tambah ke knowledge: POST /api/v1/knowledge/{id}/file/add&lt;br /&gt;
 - Buat knowledge: POST /api/v1/knowledge/create&lt;br /&gt;
 &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 import time&lt;br /&gt;
 import json&lt;br /&gt;
 import glob&lt;br /&gt;
 import argparse&lt;br /&gt;
 import requests&lt;br /&gt;
 from typing import List, Optional &lt;br /&gt;
 &lt;br /&gt;
 def api_headers(api_key: str, accept_json: bool = True):&lt;br /&gt;
     h = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {api_key}&amp;quot;}&lt;br /&gt;
     if accept_json:&lt;br /&gt;
         h[&amp;quot;Accept&amp;quot;] = &amp;quot;application/json&amp;quot;&lt;br /&gt;
     return h &lt;br /&gt;
 &lt;br /&gt;
 def create_knowledge(base_url: str, api_key: str, name: str, description: str = &amp;quot;&amp;quot;) -&amp;gt; str:&lt;br /&gt;
     url = f&amp;quot;{base_url}/api/v1/knowledge/create&amp;quot;&lt;br /&gt;
     payload = {&amp;quot;name&amp;quot;: name, &amp;quot;description&amp;quot;: description}&lt;br /&gt;
     r = requests.post(url, headers={**api_headers(api_key), &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;}, json=payload, timeout=120)&lt;br /&gt;
     r.raise_for_status()&lt;br /&gt;
     data = r.json()&lt;br /&gt;
     kb_id = data.get(&amp;quot;id&amp;quot;)&lt;br /&gt;
     if not kb_id:&lt;br /&gt;
         raise RuntimeError(f&amp;quot;Gagal membuat knowledge: {data}&amp;quot;)&lt;br /&gt;
     return kb_id &lt;br /&gt;
 &lt;br /&gt;
 def upload_file(base_url: str, api_key: str, file_path: str) -&amp;gt; Optional[str]:&lt;br /&gt;
     url = f&amp;quot;{base_url}/api/v1/files/&amp;quot;&lt;br /&gt;
     with open(file_path, &amp;quot;rb&amp;quot;) as f:&lt;br /&gt;
         files = {&amp;quot;file&amp;quot;: (os.path.basename(file_path), f, &amp;quot;application/pdf&amp;quot;)}&lt;br /&gt;
         r = requests.post(url, headers=api_headers(api_key), files=files, timeout=600)&lt;br /&gt;
     if r.status_code &amp;gt;= 400:&lt;br /&gt;
         # Banyak kasus gagal karena file khusus, PDF rusak, dsb.&lt;br /&gt;
         print(f&amp;quot;[WARN] Upload gagal: {file_path} -&amp;gt; {r.status_code} {r.text}&amp;quot;)&lt;br /&gt;
         return None&lt;br /&gt;
     data = r.json()&lt;br /&gt;
     return data.get(&amp;quot;id&amp;quot;)  # file_id &lt;br /&gt;
 &lt;br /&gt;
 def add_file_to_knowledge(base_url: str, api_key: str, knowledge_id: str, file_id: str) -&amp;gt; bool:&lt;br /&gt;
     url = f&amp;quot;{base_url}/api/v1/knowledge/{knowledge_id}/file/add&amp;quot;&lt;br /&gt;
     payload = {&amp;quot;file_id&amp;quot;: file_id}&lt;br /&gt;
     r = requests.post(url, headers={**api_headers(api_key), &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;}, json=payload, timeout=120)&lt;br /&gt;
     if r.status_code == 400 and &amp;quot;Duplicate content&amp;quot; in r.text:&lt;br /&gt;
         # Open WebUI bisa mengembalikan 400 duplicate bila konten sama sudah ada&lt;br /&gt;
         print(f&amp;quot;[INFO] Duplikat terdeteksi, skip file_id={file_id}&amp;quot;)&lt;br /&gt;
         return False&lt;br /&gt;
     r.raise_for_status()&lt;br /&gt;
     return True &lt;br /&gt;
 &lt;br /&gt;
 def find_or_create_kb(base_url: str, api_key: str, kb_name: str, kb_description: str = &amp;quot;&amp;quot;) -&amp;gt; str:&lt;br /&gt;
     &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
     Jika Anda sudah tahu UUID knowledge, langsung pakai.&lt;br /&gt;
     Kalau belum, cara termudah adalah buat baru dengan nama yang diinginkan.&lt;br /&gt;
     &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
     print(f&amp;quot;[STEP] Membuat knowledge &amp;#039;{kb_name}&amp;#039;&amp;quot;)&lt;br /&gt;
     return create_knowledge(base_url, api_key, kb_name, kb_description) &lt;br /&gt;
 &lt;br /&gt;
 def collect_pdf_paths(input_path: str) -&amp;gt; List[str]:&lt;br /&gt;
     if os.path.isdir(input_path):&lt;br /&gt;
         # Ambil semua PDF di folder (tanpa rekursif). Ubah ke **/*.pdf jika ingin rekursif.&lt;br /&gt;
         return sorted(glob.glob(os.path.join(input_path, &amp;quot;*.pdf&amp;quot;)))&lt;br /&gt;
     elif os.path.isfile(input_path):&lt;br /&gt;
         return [input_path]&lt;br /&gt;
     else:&lt;br /&gt;
         raise FileNotFoundError(f&amp;quot;Path tidak ditemukan: {input_path}&amp;quot;) &lt;br /&gt;
 &lt;br /&gt;
 def rag_test_query(base_url: str, api_key: str, model: str, kb_id: str, user_query: str) -&amp;gt; str:&lt;br /&gt;
     &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
     Gunakan chat completions + files:[{type:&amp;#039;collection&amp;#039;, id:kb_id}] untuk uji RAG.&lt;br /&gt;
     &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
     url = f&amp;quot;{base_url}/api/chat/completions&amp;quot;&lt;br /&gt;
     payload = {&lt;br /&gt;
         &amp;quot;model&amp;quot;: model,&lt;br /&gt;
         &amp;quot;messages&amp;quot;: [{&amp;quot;role&amp;quot;: &amp;quot;user&amp;quot;, &amp;quot;content&amp;quot;: user_query}],&lt;br /&gt;
         &amp;quot;files&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;collection&amp;quot;, &amp;quot;id&amp;quot;: kb_id}],&lt;br /&gt;
     }&lt;br /&gt;
     r = requests.post(url, headers={**api_headers(api_key), &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;}, json=payload, timeout=600)&lt;br /&gt;
     r.raise_for_status()&lt;br /&gt;
     data = r.json()&lt;br /&gt;
     # Bentuk respons mengikuti OpenAI-compatible schema.&lt;br /&gt;
     try:&lt;br /&gt;
         return data[&amp;quot;choices&amp;quot;][0][&amp;quot;message&amp;quot;][&amp;quot;content&amp;quot;]&lt;br /&gt;
     except Exception:&lt;br /&gt;
         return json.dumps(data, ensure_ascii=False, indent=2) &lt;br /&gt;
 &lt;br /&gt;
 def main():&lt;br /&gt;
     p = argparse.ArgumentParser(description=&amp;quot;Upload PDF ke Open WebUI Knowledge (tanpa GUI).&amp;quot;)&lt;br /&gt;
     p.add_argument(&amp;quot;--base-url&amp;quot;, required=True, help=&amp;quot;Contoh: http://localhost:3000&amp;quot;)&lt;br /&gt;
     p.add_argument(&amp;quot;--api-key&amp;quot;, required=True, help=&amp;quot;API Key dari Settings &amp;gt; Account&amp;quot;)&lt;br /&gt;
     p.add_argument(&amp;quot;--kb-name&amp;quot;, required=True, help=&amp;quot;Nama knowledge (collection) yang akan dibuat&amp;quot;)&lt;br /&gt;
     p.add_argument(&amp;quot;--kb-desc&amp;quot;, default=&amp;quot;&amp;quot;, help=&amp;quot;Deskripsi knowledge&amp;quot;)&lt;br /&gt;
     p.add_argument(&amp;quot;--input&amp;quot;, required=True, help=&amp;quot;Path ke file PDF atau folder berisi PDF&amp;quot;)&lt;br /&gt;
     p.add_argument(&amp;quot;--model&amp;quot;, default=&amp;quot;llama3.1&amp;quot;, help=&amp;quot;Nama model untuk uji RAG (opsional)&amp;quot;)&lt;br /&gt;
     p.add_argument(&amp;quot;--test-query&amp;quot;, default=&amp;quot;&amp;quot;, help=&amp;quot;Jika diisi, lakukan uji query RAG ke collection&amp;quot;)&lt;br /&gt;
     p.add_argument(&amp;quot;--sleep-after-upload&amp;quot;, type=int, default=3, help=&amp;quot;Delay (detik) antar upload untuk memberi waktu proses  embedding&amp;quot;)&lt;br /&gt;
     args = p.parse_args()&lt;br /&gt;
 &lt;br /&gt;
     base_url = args.base_url.rstrip(&amp;quot;/&amp;quot;)&lt;br /&gt;
     api_key = args.api_key &lt;br /&gt;
 &lt;br /&gt;
     # 1) Buat knowledge&lt;br /&gt;
     kb_id = find_or_create_kb(base_url, api_key, args.kb_name, args.kb_desc)&lt;br /&gt;
     print(f&amp;quot;[OK] Knowledge dibuat: {kb_id}&amp;quot;) &lt;br /&gt;
 &lt;br /&gt;
     # 2) Kumpulkan PDF&lt;br /&gt;
     pdfs = collect_pdf_paths(args.input)&lt;br /&gt;
     if not pdfs:&lt;br /&gt;
         print(&amp;quot;[WARN] Tidak ada PDF ditemukan.&amp;quot;)&lt;br /&gt;
         sys.exit(0)&lt;br /&gt;
     print(f&amp;quot;[STEP] Menemukan {len(pdfs)} file PDF&amp;quot;)  &lt;br /&gt;
 &lt;br /&gt;
     # 3) Upload + tambahkan ke knowledge&lt;br /&gt;
     uploaded = 0&lt;br /&gt;
     for path in pdfs:&lt;br /&gt;
         print(f&amp;quot;[STEP] Upload: {path}&amp;quot;)&lt;br /&gt;
         file_id = upload_file(base_url, api_key, path)&lt;br /&gt;
         if not file_id:&lt;br /&gt;
             continue&lt;br /&gt;
         print(f&amp;quot;[OK] File terupload, file_id={file_id} -&amp;gt; tambah ke knowledge&amp;quot;)&lt;br /&gt;
         try:&lt;br /&gt;
             add_file_to_knowledge(base_url, api_key, kb_id, file_id)&lt;br /&gt;
             uploaded += 1&lt;br /&gt;
         except requests.HTTPError as e:&lt;br /&gt;
             print(f&amp;quot;[ERR] Gagal tambah ke knowledge: {e.response.status_code} {e.response.text}&amp;quot;)&lt;br /&gt;
         # beri jeda kecil agar proses embedding tidak numpuk (praktis untuk CPU-only)&lt;br /&gt;
         time.sleep(args.sleep_after_upload)  &lt;br /&gt;
 &lt;br /&gt;
     print(f&amp;quot;[DONE] Selesai. Total file berhasil diproses: {uploaded}/{len(pdfs)}&amp;quot;) &lt;br /&gt;
 &lt;br /&gt;
     # 4) Uji RAG (opsional) &lt;br /&gt;
     if args.test_query:&lt;br /&gt;
         print(f&amp;quot;[TEST] Jalankan uji RAG model={args.model}&amp;quot;)&lt;br /&gt;
         answer = rag_test_query(base_url, api_key, args.model, kb_id, args.test_query)&lt;br /&gt;
         print(&amp;quot;\n=== JAWABAN RAG ===\n&amp;quot;)&lt;br /&gt;
         print(answer)&lt;br /&gt;
         print(&amp;quot;\n===================\n&amp;quot;) &lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
     main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== owui-pakai.py ==&lt;br /&gt;
&lt;br /&gt;
 # 0) Set variabel (opsional)&lt;br /&gt;
 export OWUI_URL=&amp;quot;http://localhost:3000&amp;quot;&lt;br /&gt;
 export OWUI_KEY=&amp;quot;sk-xxxxxx&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # 1) Jalankan: buat KB + upload semua PDF di folder ./dokumen&lt;br /&gt;
 python3 owui_upload_kb.py \&lt;br /&gt;
   --base-url &amp;quot;$OWUI_URL&amp;quot; \&lt;br /&gt;
   --api-key &amp;quot;$OWUI_KEY&amp;quot; \&lt;br /&gt;
   --kb-name &amp;quot;Dokumen Kampus&amp;quot; \&lt;br /&gt;
   --kb-desc &amp;quot;Koleksi PDF Peraturan &amp;amp; Panduan&amp;quot; \&lt;br /&gt;
   --input &amp;quot;./dokumen&amp;quot; \&lt;br /&gt;
   --model &amp;quot;llama3.1&amp;quot; \&lt;br /&gt;
   --test-query &amp;quot;Ringkas poin penting dari semua dokumen tentang akreditasi BAN-PT.&amp;quot; &lt;br /&gt;
 &lt;br /&gt;
 # Atau untuk satu file saja:&lt;br /&gt;
 python3 owui_upload_kb.py \&lt;br /&gt;
   --base-url &amp;quot;$OWUI_URL&amp;quot; \&lt;br /&gt;
   --api-key &amp;quot;$OWUI_KEY&amp;quot; \&lt;br /&gt;
   --kb-name &amp;quot;RIP ITTS 2025-2050&amp;quot; \&lt;br /&gt;
   --input &amp;quot;./RIP-ITTS-2025-2050.pdf&amp;quot; \&lt;br /&gt;
   --test-query &amp;quot;Apa visi utama dokumen ini?&amp;quot;&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>