a work in progress
This commit is contained in:
		
						commit
						8b7ec8e5f3
					
				
					 5 changed files with 192 additions and 0 deletions
				
			
		
							
								
								
									
										31
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,31 @@ | ||||||
|  | BSD-style license | ||||||
|  | ================= | ||||||
|  |   | ||||||
|  | Copyright (c) 2008, Sunlight Labs | ||||||
|  |   | ||||||
|  | All rights reserved. | ||||||
|  |   | ||||||
|  | Redistribution and use in source and binary forms, with or without modification, | ||||||
|  | are permitted provided that the following conditions are met: | ||||||
|  |   | ||||||
|  |     * Redistributions of source code must retain the above copyright notice, | ||||||
|  |       this list of conditions and the following disclaimer. | ||||||
|  |     * Redistributions in binary form must reproduce the above copyright notice, | ||||||
|  |       this list of conditions and the following disclaimer in the documentation | ||||||
|  |       and/or other materials provided with the distribution. | ||||||
|  |     * Neither the name of Sunlight Labs nor the names of its contributors may be | ||||||
|  |       used to endorse or promote products derived from this software without | ||||||
|  |       specific prior written permission. | ||||||
|  |   | ||||||
|  | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||||
|  | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||||
|  | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||||
|  | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||||||
|  | CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||||||
|  | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||||||
|  | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||||||
|  | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||||||
|  | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||||
|  | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||||
|  | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  |   | ||||||
							
								
								
									
										1
									
								
								MANIFEST.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								MANIFEST.in
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | include LICENSE *.rst *.py | ||||||
							
								
								
									
										37
									
								
								README.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								README.rst
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | ||||||
|  | ================== | ||||||
|  | python-sunlightapi | ||||||
|  | ================== | ||||||
|  | 
 | ||||||
|  | Python library for interacting with the Disqus API. | ||||||
|  | 
 | ||||||
|  | Documentation for the Disqus API is available at http://wiki.disqus.net/API | ||||||
|  | 
 | ||||||
|  | Written by James Turk <james.p.turk@gmail.com>. | ||||||
|  | 
 | ||||||
|  | All code is under a BSD-style license, see LICENSE for details. | ||||||
|  | 
 | ||||||
|  | Homepage: http://pypi.python.org/pypi/python-disqus/ | ||||||
|  | 
 | ||||||
|  | Source: http://github.com/jamesturk/python-disqus/ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Requirements | ||||||
|  | ============ | ||||||
|  | 
 | ||||||
|  | python >= 2.4 | ||||||
|  | 
 | ||||||
|  | simplejson >= 1.8 (not required with python 2.6, will use built in json module) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Installation | ||||||
|  | ============ | ||||||
|  | To install run | ||||||
|  | 
 | ||||||
|  |     ``python setup.py install`` | ||||||
|  | 
 | ||||||
|  | which will install the bindings into python's site-packages directory. | ||||||
|  | 
 | ||||||
|  | Usage | ||||||
|  | ===== | ||||||
|  | 
 | ||||||
|  | I promise, I'll write this soon, bug me if you need docs. | ||||||
							
								
								
									
										97
									
								
								disqus.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								disqus.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,97 @@ | ||||||
|  | """ Python library for interacting with the Disqus API. | ||||||
|  |   | ||||||
|  | The Disqus API (http://wiki.disqus.net/API) allows for interaction with | ||||||
|  | the Disqus comment system. | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | __author__ = "James Turk (james.p.turk@gmail.com)" | ||||||
|  | __version__ = "0.0.1" | ||||||
|  | __copyright__ = "Copyright (c) 2009 James Turk" | ||||||
|  | __license__ = "BSD" | ||||||
|  |   | ||||||
|  | import urllib, urllib2 | ||||||
|  | try: | ||||||
|  |     import json | ||||||
|  | except ImportError: | ||||||
|  |     import simplejson as json | ||||||
|  | 
 | ||||||
|  | api_url = 'http://disqus.com/api/%s/' | ||||||
|  | 
 | ||||||
|  | def apicall(method, params, http_method='GET'): | ||||||
|  |     params = urllib.urlencode(params) | ||||||
|  |     if http_method == 'GET': | ||||||
|  |         url = '?'.join((api_url % method, params)) | ||||||
|  |         response = urllib2.urlopen(url).read() | ||||||
|  |     else: | ||||||
|  |         response = urllib2.urlopen(api_url % method, params).read() | ||||||
|  |     msg = json.loads(response)['message'] | ||||||
|  |     return msg | ||||||
|  | 
 | ||||||
|  | class Thread(object): | ||||||
|  |     def __init__(self, d, forum_api_key): | ||||||
|  |         for k,v in d.iteritems(): | ||||||
|  |             setattr(self, k, v) | ||||||
|  |         self.forum_api_key = forum_api_key | ||||||
|  | 
 | ||||||
|  |     def get_posts(self): | ||||||
|  |         return apicall('get_thread_posts', {'forum_api_key': self.forum_api_key,  | ||||||
|  |                                             'thread_id': self.id}) | ||||||
|  | 
 | ||||||
|  |     def update(self, title=None, slug=None, url=None, allow_comments=None): | ||||||
|  |         params = {'forum_api_key': self.forum_api_key, 'thread_id': self.id} | ||||||
|  |         if title: | ||||||
|  |             params['title'] = title | ||||||
|  |         if slug: | ||||||
|  |             params['slug'] = slug | ||||||
|  |         if url: | ||||||
|  |             params['url'] = url | ||||||
|  |         if allow_comments is not None: | ||||||
|  |             params['allow_comments'] = allow_comments | ||||||
|  |         return apicall('update_thread', params, 'POST') | ||||||
|  | 
 | ||||||
|  | class Forum(object): | ||||||
|  |     def __init__(self, d): | ||||||
|  |         for k,v in d.iteritems(): | ||||||
|  |             setattr(self, k, v) | ||||||
|  |         self._api_key = None | ||||||
|  | 
 | ||||||
|  |     @property | ||||||
|  |     def api_key(self): | ||||||
|  |         if not self._api_key: | ||||||
|  |             msg = apicall('get_forum_api_key', {'user_api_key':user_key, | ||||||
|  |                                                  'forum_id':self.id}) | ||||||
|  |             self._api_key = msg | ||||||
|  |         return self._api_key | ||||||
|  | 
 | ||||||
|  |     def create_post(thread_id, message, author_name, author_email, parent_post=None,  | ||||||
|  |                     created_at=None, author_url=None, ip_address=None): | ||||||
|  |         params = {'forum_api_key': self.api_key, 'thread_id':thread_id, 'message':message, 'author_name':author_name, 'author_email':author_email} | ||||||
|  |         if parent_post: | ||||||
|  |             params['parent_post'] = parent_post | ||||||
|  |         if created_at: | ||||||
|  |             params['created_at'] = created_at | ||||||
|  |         if author_url: | ||||||
|  |             params['author_url'] = author_url | ||||||
|  |         if ip_address: | ||||||
|  |             params['ip_address'] = ip_address | ||||||
|  |         return apicall('create_post', params, 'POST') | ||||||
|  | 
 | ||||||
|  |     def get_thread_list(self): | ||||||
|  |         msg = apicall('get_thread_list', {'forum_api_key':self.api_key}) | ||||||
|  |         return [Thread(t, self.api_key) for t in msg] | ||||||
|  | 
 | ||||||
|  |     def get_num_posts(self, *thread_ids): | ||||||
|  |         params = {'forum_api_key': self.api_key, 'thread_ids': ','.join(thread_ids)} | ||||||
|  |         return apicall('get_num_posts', params) | ||||||
|  | 
 | ||||||
|  |     def get_thread_by_url(self, url): | ||||||
|  |         msg = apicall('get_thread_by_url', {'forum_api_key': self.api_key, 'url': url}) | ||||||
|  |         return Thread(msg, self.api_key) | ||||||
|  | 
 | ||||||
|  |     def thread_by_identifier(self, title, identifier): | ||||||
|  |         msg = apicall('thread_by_identifier', {'forum_api_key': self.api_key, 'title': title, 'identifier': identifier}, 'POST') | ||||||
|  |         return Thread(msg['thread'], self.api_key), msg['created'] | ||||||
|  | 
 | ||||||
|  | def get_forum_list(user_key): | ||||||
|  |     msg = apicall('get_forum_list', {'user_api_key':user_key}) | ||||||
|  |     return [Forum(f) for f in msg] | ||||||
							
								
								
									
										26
									
								
								setup.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								setup.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | ||||||
|  | from distutils.core import setup | ||||||
|  | from disqus import __version__,__license__,__doc__ | ||||||
|  |   | ||||||
|  | license_text = open('LICENSE').read() | ||||||
|  | long_description = open('README.rst').read() | ||||||
|  |   | ||||||
|  | setup(name="python-disqus", | ||||||
|  |       version=__version__, | ||||||
|  |       py_modules=["disqus"], | ||||||
|  |       description="Libraries for interacting with the Disqus API", | ||||||
|  |       author="James Turk", | ||||||
|  |       author_email = "james.p.turk@gmail.com", | ||||||
|  |       license=license_text, | ||||||
|  |       url="http://github.com/jamesturk/python-disqus/", | ||||||
|  |       long_description=long_description, | ||||||
|  |       platforms=["any"], | ||||||
|  |       classifiers=["Development Status :: 3 - Alpha", | ||||||
|  |                    "Intended Audience :: Developers", | ||||||
|  |                    "License :: OSI Approved :: BSD License", | ||||||
|  |                    "Natural Language :: English", | ||||||
|  |                    "Operating System :: OS Independent", | ||||||
|  |                    "Programming Language :: Python", | ||||||
|  |                    "Topic :: Software Development :: Libraries :: Python Modules", | ||||||
|  |                    ], | ||||||
|  |        install_requires=["simplejson >= 1.8"] | ||||||
|  |       ) | ||||||
		Loading…
	
		Reference in a new issue
	
	 James Turk
						James Turk