{
"info": {
"author": "Chris Caron",
"author_email": "lead2gold@gmail.com",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
"Natural Language :: English",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Topic :: Software Development :: Libraries :: Application Frameworks",
"Topic :: Software Development :: Libraries :: Python Modules"
],
"description": "[](https://travis-ci.org/caronc/pynzbget)\n[](https://codecov.io/github/caronc/pynzbget)\n[](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=MHANV39UZNQ5E)
\n\nDescription\n===========\nThis provides a python framework to design NZBGet scripts with. The intent\nwas to greatly simplify the development and debugging process. It was\ninitially designed to work with NZBGet and is backwards compatible with all previous versions (as far back to v11). However it is also compatible with SABnzbd users too!\n\n* It contains a built in meta tag parser to extract content from NZB-Files.\n _Note: This can only happen if lxml is installed on your system_.\n* It can preform very basic obfuscation support on filenames that can not be\n interpreted.\n* It creates a common SQLite database (optionally) to additionally write\n content passed via the set() function. This allows another script to later\n call get() and retrieve the data set() by another.\n* It prepares logging right out of the box for you, there is no setup required\n* All return codes have been simplified to None/True/False (you can still\n use the old ones if you want).\n* It handles all of the exception handling. By this I mean, your code can throw\n an except and it's traceback will be captured gracefully to logging. Then the\n framework will look after returning a correct failure error code to NZBGet.\n* It provides some very useful functions that are always being re-written\n inside of every other NZBGet script such as file scanning.\n* It greatly simplifies the handling of environment variables and interaction\n to and from NZBGet.\n* It can also be adapted to support SABnzbd scripting! Thus any script you write\n for NZBGet users, you can also tweak to work [with SABnzbd users too](https://github.com/caronc/pynzbget/wiki/SAB_PostProcessScripts)!\n\nDocumentation\n=============\nFor the most up to date information and API, visit the wiki at\n* https://github.com/caronc/pynzbget/wiki\n\nThe entire framework was based on the information found here:\n* [NZBGet](https://nzbget.net)\n* [NZBGet Scripting Documentation](http://nzbget.net/Extension_scripts)\n* [SABnzbd](http://sabnzbd.org/)\n* [SABnzbd Scripting Documentation](https://sabnzbd.org/wiki/scripts/post-processing-scripts)\n\nSimplified Development\n======================\nThe following are some of the functionality that is built in for you:\n\n * __validate()__ - Handle environment checking, correct versioning as well\n as if the expected configuration variables you specified\n are present.\n\n * __health_check()__ - Checks the status of the retrieved content, currently\n this is only useful during Post-Processing.\n\n * __push()__ - Pushes a variables to the NZBGet server.\n\n\n * __set()/get()__ - Hash table get/set attributes that can be set in one script\n and then later retrieved from another. get() can also\n be used to fetch content that was previously pushed using\n the push() tool. You no longer need to work with environment\n variables. If you enable the SQLite database, set content is\n put here as well so that it can be retrieved by another\n script.\n\n * __unset()__ - This allows you to unset values set by set() and get() as well\n as ones set by push().\n\n * __nzb_set()__ - Similar to the set() function identified above except it\n is used to build an nzb meta hash table which can be later\n pushed to the server using push_dnzb().\n\n * __add_nzb()__ - Using the built in API/RPC NZBGet supports, this\n allows you to specify a path to an NZBFile which you want to\n enqueue for downloading.\n\n * __nzb_get()__ - Retieves NZB Meta information previously stored.\n\n * __nzb_unset()__ - Removes a variable previously set completely.\n\n * __get_statistics()__ - Using the built in API/RPC NZBGet supports, this\n retrieves and returns the statistics in an easy to ready\n dictionary (_PostProcessScript_ only).\n\n * __get_logs()__ - Using the built in API/RPC NZBGet supports, this\n retrieves and returns the latest logs.\n\n * __get_files()__ - list all files in a specified directory as well as fetching\n their details such as filesize, modified date, etc in an\n easy to reference dictionary. You can provide a ton of\n different filters to minimize the content returned. Filters\n can by a regular expression, file prefixes, and/or suffixes.\n\n * __parse_nzbfile()__ - Parse an NZB-File and extract all of its meta\n information from it. lxml must be installed on your\n system for this to work correctly.\n\n * __parse_list()__ - Takes a string (or more) as well as lists of strings as\n input. It then cleans it up and produces an easy to\n manage list by combining all of the results into 1.\n Hence: parse_list('.mkv, .avi') returns:\n [ '.mkv', '.avi' ]\n\n * __parse_path_list()__ - Very smilar to parse_list() except that it is used\n to handle directory paths while cleaning them up at the\n same time.\n\n * __parse_bool()__ - Handles all of NZBGet's configuration options such as\n 'on' and 'off' as well as 'yes' or 'no', or 'True' and\n 'False'. It greatly simplifies the checking of these\n variables passed in from NZBGet.\n\n\n * __push_guess()__ - You can push a guessit dictionary (or one of your own\n that can help identify your release for other scripts\n to use later after yours finishes.\n\n * __pull_guess()__ - Pull a previous guess pushed by another script.\n why redo grunt work if it's already done for you?\n if no previous guess content was pushed, then an\n empty dictionary is returned.\n\n * __push_dnzb()__ - You can push all nzb meta information onbtained to\n the NZBGet server as DNZB_ meta tags.\n\n * __pull_dnzb()__ - Pull all DNZB_ meta tags issued by the server and\n return their values in a dictionary.\n if no DNZB_ (NZB Meta information) was found, then an\n empty dictionary is returned instead.\n\n * __deobfuscate()__ - Take a filename and return it in a deobfuscated to the\n best of its ability. (_PostProcessScript_ only)\n\n * __is_unique_instance()__ - Allows you to ensure your instance of your script is\n unique. This is useful for Scheduled scripts which can be\n called and then run concurrently with NZBGet.\nHow To Use\n==========\n* Developers are only required to define a class that inherits the NZBGet class\nthat identifies what they are attempting to write (_ScanScript_,\n_PostProcessScript_, etc.).\n\n* Then you write all of your code a the _main()_ you must define.\n\nPost Process Script Example\n===========================\n```python\n#############################################################################\n### NZBGET POST-PROCESSING SCRIPT ###\n#\n# Author: Your Name Goes Here \n#\n# Describe your Post-Process Script here\n#\n\n############################################################################\n### OPTIONS ###\n\n#\n# Enable NZBGet debug logging (yes, no)\n# Debug=no\n#\n\n### NZBGET POST-PROCESSING SCRIPT ###\n#############################################################################\n\nfrom nzbget import PostProcessScript\n\n# Now define your class while inheriting the rest\nclass MyPostProcessScript(PostProcessScript):\n def main(self, *args, **kwargs):\n # write all of your code here you would have otherwise put in the\n # script\n\n if not self.validate():\n # No need to document a failure, validate will do that\n # on the reason it failed anyway\n return False\n\n # All system environment variables (NZBOP_.*) as well as Post\n # Process script specific content (NZBPP_.*)\n # following dictionary (without the NZBOP_ or NZBPP_ prefix):\n print 'DIRECTORY %s' self.get('DIRECTORY')\n print 'NZBNAME %s' self.get('NZBNAME')\n print 'NZBFILENAME %s' self.get('NZBFILENAME')\n print 'CATEGORY %s' self.get('CATEGORY')\n print 'TOTALSTATUS %s' self.get('TOTALSTATUS')\n print 'STATUS %s' self.get('STATUS')\n print 'SCRIPTSTATUS %s' self.get('SCRIPTSTATUS')\n\n # Set any variable you want by any key. Note that if you use\n # keys that were defined by the system (such as CATEGORY, DIRECTORY,\n # etc, you may have some undesirable results. Try to avoid reusing\n # system variables already defined (identified above):\n self.set('MY_KEY', 'MY_VALUE')\n\n # You can fetch it back; this will also set an entry in the\n # sqlite database for each hash references that can be pulled from\n # another script that simply calls self.get('MY_VAR')\n print self.get('MY_KEY') # prints MY_VALUE\n\n # You can also use push() which is similar to set()\n # except that it interacts with the NZBGet Server and does not use\n # the sqlite database. This can only be reached across other\n # scripts if the calling application is NZBGet itself\n self.push('ANOTHER_KEY', 'ANOTHER_VALUE')\n\n # You can still however locally retrieve what you set using push()\n # with the get() function\n print self.get('ANOTHER_KEY') # prints ANOTHER_VALUE\n\n # Your script configuration files (NZBPP_.*) are here in this\n # dictionary (again without the NZBPP_ prefix):\n # assume you defined `Debug=no` in the first 10K of your PostProcessScript\n # NZBGet translates this to `NZBPP_DEBUG` which can be retrieved\n # as follows:\n print 'DEBUG %s' self.get('DEBUG')\n\n # Returns have been made easy. Just return:\n # * True if everything was successful\n # * False if there was a problem\n # * None if you want to report that you've just gracefully\n skipped processing (this is better then False)\n in some circumstances. This is neither a failure or a\n success status.\n\n # Feel free to use the actual exit codes as well defined by\n # NZBGet on their website. They have also been defined here\n # from nzbget import EXIT_CODE\n\n return True\n\n# Call your script as follows:\nif __name__ == \"__main__\":\n from sys import exit\n\n # Create an instance of your Script\n ppscript = MyPostProcessScript()\n\n # call run() and exit() using it's returned value\n exit(ppscript.run())\n```\n\nScan Script Example\n===================\n```python\n############################################################################\n### NZBGET SCAN SCRIPT ###\n#\n# Author: Your Name Goes Here \n#\n# Describe your Scan Script here\n#\n\n############################################################################\n### OPTIONS ###\n\n#\n# Enable NZBGet debug logging (yes, no)\n# Debug=no\n#\n\n### NZBGET SCAN SCRIPT ###\n############################################################################\n\nfrom nzbget import ScanScript\n\n# Now define your class while inheriting the rest\nclass MyScanScript(ScanScript):\n def main(self, *args, **kwargs):\n # write all of your code here you would have otherwise put in the\n # script\n\n if not self.validate():\n # No need to document a failure, validate will do that\n # on the reason it failed anyway\n return False\n\n # All system environment variables (NZBOP_.*) as well as Post\n # Process script specific content (NZBNP_.*)\n # following dictionary (without the NZBOP_ or NZBNP_ prefix):\n print 'DIRECTORY %s' self.get('DIRECTORY')\n print 'FILENAME %s' self.get('FILENAME')\n print 'NZBNAME %s' self.get('NZBNAME')\n print 'CATEGORY %s' self.get('CATEGORY')\n print 'PRIORITY %s' self.get('PRIORITY')\n print 'TOP %s' self.get('TOP')\n print 'PAUSED %s' self.get('PAUSED')\n\n return True\n\n# Call your script as follows:\nif __name__ == \"__main__\":\n from sys import exit\n\n # Create an instance of your Script\n scanscript = MyScanScript()\n\n # call run() and exit() using it's returned value\n exit(scanscript.run())\n```\n\nScheduler Script Example\n=======================\n```python\n############################################################################\n### NZBGET SCHEDULER SCRIPT ###\n#\n# Describe your Schedule Script here\n# Author: Your Name Goes Here \n#\n\n############################################################################\n### OPTIONS ###\n\n#\n# Enable NZBGet debug logging (yes, no)\n# Debug=no\n#\n\n### NZBGET SCHEDULER SCRIPT ###\n############################################################################\n\nfrom nzbget import SchedulerScript\n\n# Now define your class while inheriting the rest\nclass MySchedulerScript(SchedulerScript):\n def main(self, *args, **kwargs):\n\n # Version Checking, Environment Variables Present, etc\n if not self.validate():\n # No need to document a failure, validate will do that\n # on the reason it failed anyway\n return False\n\n # write all of your code here you would have otherwise put in the\n # script\n\n # All system environment variables (NZBOP_.*) as well as Post\n # Process script specific content (NZBSP_.*)\n # following dictionary (without the NZBOP_ or NZBSP_ prefix):\n print 'DESTDIR %s' self.get('DESTDIR')\n\n return True\n# Call your script as follows:\nif __name__ == \"__main__\":\n from sys import exit\n\n # Create an instance of your Script\n myscript = MySchedulerScript()\n\n # call run() and exit() using it's returned value\n exit(myscript.run())\n```\n\nMultiScript Example\n=======================\n```python\n############################################################################\n### NZBGET POST-PROCESSING/SCHEDULER SCRIPT ###\n#\n# Describe your Multi Script here\n#\n# Author: Your Name Goes Here \n#\n\n############################################################################\n### OPTIONS ###\n\n#\n# Enable NZBGet debug logging (yes, no)\n# Debug=no\n#\n\n### NZBGET POST-PROCESSING/SCHEDULER SCRIPT ###\n############################################################################\n\nfrom nzbget import PostProcessScript\nfrom nzbget import SchedulerScript\n\n# Now define your class while inheriting the rest\nclass MyMultiScript(PostProcessScript, SchedulerScript):\n\n def postprocess_main(self, *args, **kwargs):\n\n # Version Checking, Environment Variables Present, etc\n if not self.validate():\n # No need to document a failure, validate will do that\n # on the reason it failed anyway\n return False\n\n # write your main function for your Post Processing\n\n return True\n\n def scheduler_main(self, *args, **kwargs):\n\n # Version Checking, Environment Variables Present, etc\n if not self.validate():\n # No need to document a failure, validate will do that\n # on the reason it failed anyway\n return False\n\n # write your main function for your Post Processing\n\n return True\n\n# Call your script as follows:\nif __name__ == \"__main__\":\n from sys import exit\n\n # Create an instance of your Script\n myscript = MyMultiScript()\n\n # call run() and exit() using it's returned value\n exit(myscript.run())\n```\n\n\n",
"description_content_type": "text/markdown",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "http://github.com/caronc/pynzbget",
"keywords": "nzbget,postprocess,framework,scripts,nzb,sabnzbd",
"license": "GPLv3",
"maintainer": "",
"maintainer_email": "",
"name": "pynzbget",
"package_url": "https://pypi.org/project/pynzbget/",
"platform": "",
"project_url": "https://pypi.org/project/pynzbget/",
"project_urls": {
"Homepage": "http://github.com/caronc/pynzbget"
},
"release_url": "https://pypi.org/project/pynzbget/0.6.4/",
"requires_dist": [
"lxml (>=2.7)",
"six"
],
"requires_python": ">=2.7",
"summary": "Provides a framework for NZBGet and SABnzbd scriptdevelopment.",
"version": "0.6.4"
},
"last_serial": 5864727,
"releases": {
"0.3.0": [],
"0.3.1": [],
"0.3.2": [],
"0.5.1": [
{
"comment_text": "",
"digests": {
"md5": "b9c919ca21d16064dee2232ec60f39b3",
"sha256": "1b442ef1d871bb09585294203abd7f105ae40ce0244b310b8d0b223e7a40c67a"
},
"downloads": -1,
"filename": "pynzbget-0.5.1-py27-none-any.whl",
"has_sig": false,
"md5_digest": "b9c919ca21d16064dee2232ec60f39b3",
"packagetype": "bdist_wheel",
"python_version": "py27",
"requires_python": ">=2.6, <3",
"size": 74012,
"upload_time": "2017-07-10T01:36:54",
"url": "https://files.pythonhosted.org/packages/f5/8d/bb5a13d1ac4f3eea6c716b5c98866f2235318a792b624c506a529ea15d2e/pynzbget-0.5.1-py27-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "4630d05cd0faa8125b83cb51639238f6",
"sha256": "3a984af2a2c6ddaa36aa4ea48d48bbb2c0a80b1b8fb2ee8af13aa8ac58989150"
},
"downloads": -1,
"filename": "pynzbget-0.5.1.tar.gz",
"has_sig": false,
"md5_digest": "4630d05cd0faa8125b83cb51639238f6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=2.6, <3",
"size": 51631,
"upload_time": "2017-07-10T01:36:55",
"url": "https://files.pythonhosted.org/packages/6c/66/3c42a6fb40af21fe8772899734c9fc0b2e38373b1c67526162bcf19fa3e9/pynzbget-0.5.1.tar.gz"
}
],
"0.6.1": [
{
"comment_text": "",
"digests": {
"md5": "a46f65573efc9e869a60fa25caaba1a1",
"sha256": "fde7d0f154e044045f2715986bad150962e676e3e91b7b012d70e0cb09d29baf"
},
"downloads": -1,
"filename": "pynzbget-0.6.1-py27-none-any.whl",
"has_sig": false,
"md5_digest": "a46f65573efc9e869a60fa25caaba1a1",
"packagetype": "bdist_wheel",
"python_version": "py27",
"requires_python": ">=2.6, <3",
"size": 82488,
"upload_time": "2017-10-29T15:52:59",
"url": "https://files.pythonhosted.org/packages/6c/a9/e5f46d8e1cfb315a141b2a5209df31efefb8087bde9ebfa54be45cdf7b43/pynzbget-0.6.1-py27-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "fcb67b6314f1cb9e93f8613ed5a9a4c5",
"sha256": "736a4fda2dfeedfa3c52f5df9563bbed73391bb77d319225ec7a36fee2548795"
},
"downloads": -1,
"filename": "pynzbget-0.6.1.tar.gz",
"has_sig": false,
"md5_digest": "fcb67b6314f1cb9e93f8613ed5a9a4c5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=2.6, <3",
"size": 92749,
"upload_time": "2017-10-29T15:53:01",
"url": "https://files.pythonhosted.org/packages/0e/98/860923667f54124164274a95128800fcf45ead8386ed63a206374340d8ea/pynzbget-0.6.1.tar.gz"
}
],
"0.6.2": [
{
"comment_text": "",
"digests": {
"md5": "19bd79bd9ceb1b2a62eb80185f3bfc57",
"sha256": "12008c35e348e1492ed674fca33b0accd8d82ab6e8051ac0711764b873fc28c8"
},
"downloads": -1,
"filename": "pynzbget-0.6.2-py2-none-any.whl",
"has_sig": false,
"md5_digest": "19bd79bd9ceb1b2a62eb80185f3bfc57",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": ">=2.6, <3",
"size": 77690,
"upload_time": "2019-03-10T19:02:26",
"url": "https://files.pythonhosted.org/packages/b9/0b/13b749257367d65f7a803a701dd9a8e64e781fa9815064350bf4ed2061a1/pynzbget-0.6.2-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "cfa8aa2f8137ab3f31b8cc28923de696",
"sha256": "bd2fc22778ba7bfe49cfb895b6826e146811347721ef1145152d2248988c8d84"
},
"downloads": -1,
"filename": "pynzbget-0.6.2.tar.gz",
"has_sig": false,
"md5_digest": "cfa8aa2f8137ab3f31b8cc28923de696",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=2.6, <3",
"size": 95800,
"upload_time": "2019-03-10T19:02:28",
"url": "https://files.pythonhosted.org/packages/f6/a1/3ea70364f1377699a8602b22213f23ff263dd86442cce2503fbfe1a7246e/pynzbget-0.6.2.tar.gz"
}
],
"0.6.3": [
{
"comment_text": "",
"digests": {
"md5": "18969eb6ff3f1aa3c09ad03ef0d0cdcc",
"sha256": "1c5344f3f4cb5c4f708303c234af33a952a30c55a61f25b993da178294f6975b"
},
"downloads": -1,
"filename": "pynzbget-0.6.3-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "18969eb6ff3f1aa3c09ad03ef0d0cdcc",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": ">=2.7",
"size": 90410,
"upload_time": "2019-06-14T19:01:40",
"url": "https://files.pythonhosted.org/packages/b5/26/2336594ecc716c04471f76057e5987e01df852e0af9973168354919468eb/pynzbget-0.6.3-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "06814691f019e69f70a56b7e38500735",
"sha256": "d670c4331e4f719f2bd49ec8dddf03533e69cae85617ddb59c62ab84846379bf"
},
"downloads": -1,
"filename": "pynzbget-0.6.3.tar.gz",
"has_sig": false,
"md5_digest": "06814691f019e69f70a56b7e38500735",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=2.7",
"size": 96430,
"upload_time": "2019-06-14T19:01:41",
"url": "https://files.pythonhosted.org/packages/ad/1f/de9874df9264f63e90f794a0ac99d720fda60c0a5b2234208c7a17322de7/pynzbget-0.6.3.tar.gz"
}
],
"0.6.4": [
{
"comment_text": "",
"digests": {
"md5": "6356ad231f970c0865eaa68eb3bc7384",
"sha256": "8065d6000c7a8bf2379087f9dbb4e92df1aed16c2fd9751b27a3b2362b22d7b8"
},
"downloads": -1,
"filename": "pynzbget-0.6.4-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "6356ad231f970c0865eaa68eb3bc7384",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": ">=2.7",
"size": 90531,
"upload_time": "2019-09-21T00:35:02",
"url": "https://files.pythonhosted.org/packages/04/44/09f0aa7bddec1dd92282f6f1f4f10d077d1c47a57a959301eaf7248bbc24/pynzbget-0.6.4-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "8e77bf04c9d2e285b1320d9787354f82",
"sha256": "0010afccb74b20db961b02eb9b5f22c13d31614e47f27e49fd24e0e42920779e"
},
"downloads": -1,
"filename": "pynzbget-0.6.4.tar.gz",
"has_sig": false,
"md5_digest": "8e77bf04c9d2e285b1320d9787354f82",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=2.7",
"size": 96625,
"upload_time": "2019-09-21T00:35:04",
"url": "https://files.pythonhosted.org/packages/95/c3/7ac6a5a3aa19b7922b640c3afbda4b57a864194a7b29a72d40f844a28285/pynzbget-0.6.4.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "6356ad231f970c0865eaa68eb3bc7384",
"sha256": "8065d6000c7a8bf2379087f9dbb4e92df1aed16c2fd9751b27a3b2362b22d7b8"
},
"downloads": -1,
"filename": "pynzbget-0.6.4-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "6356ad231f970c0865eaa68eb3bc7384",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": ">=2.7",
"size": 90531,
"upload_time": "2019-09-21T00:35:02",
"url": "https://files.pythonhosted.org/packages/04/44/09f0aa7bddec1dd92282f6f1f4f10d077d1c47a57a959301eaf7248bbc24/pynzbget-0.6.4-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "8e77bf04c9d2e285b1320d9787354f82",
"sha256": "0010afccb74b20db961b02eb9b5f22c13d31614e47f27e49fd24e0e42920779e"
},
"downloads": -1,
"filename": "pynzbget-0.6.4.tar.gz",
"has_sig": false,
"md5_digest": "8e77bf04c9d2e285b1320d9787354f82",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=2.7",
"size": 96625,
"upload_time": "2019-09-21T00:35:04",
"url": "https://files.pythonhosted.org/packages/95/c3/7ac6a5a3aa19b7922b640c3afbda4b57a864194a7b29a72d40f844a28285/pynzbget-0.6.4.tar.gz"
}
]
}