{ "info": { "author": "Evan Leis", "author_email": "engineergod@yahoo.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Other Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# EZ-Facebook Django Utils (for django 1.3+)\n\n*FULLY FUNCTIONAL BETA*\n\nThe purpose of this package is to make facebook integration easy WITHOUT having to make your whole app depend on this package.\n\nThis package makes facebook integration easy for all kinds of web sites:\n\n- Web Applications\n- Facebook Page Tabs\n- Facebook Applications\n\nIncluded in the suite are:\n\n- Easy to use facebook settings with debug settings\n- View decorators that extract information from requests, like signed_request, and facebook graph api.\n- NEW: Middleware to apply those decorators to all functions for all defined facebook apps.\n- Facebook script template tags\n- Facebook Channel URL context variable and view\n- Facebook Settings context processors\n- Absolute Url template tag, minds current protocol. Useful for posting links and images.\n- P3P Cookie middleware to enable the use of cookies in your iframes\n\n# Installation\n\n(See ezfacebook/example_settings.py and ezfacebook/example_urls.py for examples, or view below)\n\n## Settings :: example `settings.py` file\n\n\tTEMPLATE_CONTEXT_PROCESSORS = (\n\t 'ezfacebook.context.context_processors.facebook', # ezfacebook.context: Requirement\n\t)\n\t\n\tMIDDLEWARE_CLASSES = (\n\t 'ezfacebook.helpers.middleware.IEIFrameApplicationMiddleware', # ezfacebook.helpers: Optional\n \t'ezfacebook.user.middleware.FacebookRequestMiddleware', # ezfacebook.user: Optional\n\t)\n\t\n\tINSTALLED_APPS = (\n\t 'django.contrib.sites', # ezfacebook.context: Requirement\n\t 'ezfacebook.context', # ezfacebook.context: Optional, allows templatetags absurl\n\t)\n\t\n\t# Overrides original FacebookGraphAPI class\n\tFACEBOOK_GRAPH_API_CLASS = 'myproject.myapp.lib.facebook.MyFacebookGraphAPI' # ezfacebook.lib (affects ezfacebook.user), Optional\n\t\n\tclass FACEBOOK_SETTINGS: # ezfacebook.user, ezfacebook.context: Requirement\n\t\n\t class my_first_fb_app:\n\t app_id = '00000000000000'\n\t secret = 'abcdef0123456789'\n\t scope = 'email,publish_stream,offline_access'\n\t\n\t debug_signed_request = {'id': 23840238402834} # Simulate the JSON returned by a decoded and parsed signed request\n\t debug_guid = 23840238402834 # Pretend the Facebook user has this Facebook GUID\n\t debug_token = 'AAAAAAAAAbbbbbbbbbbccccdefffffffffffffffffffetc' # Pretend the Facebook user has this access token\n\t\n\t class my_second_fb_app:\n\t app_id = '11111111111111'\n\t secret = '9876543210abcdef'\n\t scope = ''\n \t# Disable debugging by omitting the debug settings or by setting them to false\n\n \n## URLS :: example `urls.py` file\n\n\tfrom django.conf.urls.defaults import patterns, include, url\n\t\n\turlpatterns = patterns('',\n\t url(r'^fb/', include('ezfacebook.context.urls')),\n\t)\n\n# Packages\n\n# Context :: `ezfacebook.context`, installable app (if necessary)\n\nThis packages comes with the following features:\n\n- Template Tags\n- Context Processors\n- channel.html view\n\n## Template Tags :: `ezfacebook.context.templatetags`\n\nThis package must be installed in your application to use template tags.\n\n### absurl :: `ezfacebook.context.templatetags.absurl`\n\n#### absolute_url :: `ezfacebook.context.templatetags.absurl.absolute_url`\n\nBuilds an absolute URL for the given path.\nIf request is provided, the protocol (http or https) is determined from the request, otherwise http is used.\n\nExample:\n\n\t{% load absurl %}\n\t\n\t{{ obj.image.url|absolute_url }}\n\t{{ obj.image.url|absolute_url:request }}\n\n### fb_script :: `ezfacebook.context.templatetags.fb_script`\n\nThese template tags render the HTML required to the Facebook Javascript SDK.\n\n#### fb_script :: `ezfacebook.context.templatetags.fb_script.fb_script`\n\nRenders the Facebook Javascript SDK script required for facebook connectivity.\n\nExample:\n\n {% load fb_script %}\n \n {% fb_script 'my_first_fb_app' %}\n \n {% fb_script 'my_first_fb_app' use_share=True %} {# Also loads FB.Share javascript #}\n \n {# See http://bugs.developers.facebook.net/show_bug.cgi?id=19042 #}\n {% fb_script 'my_first_fb_app' fix_19042=True %} \n \n {# See http://bugs.developers.facebook.net/show_bug.cgi?id=20168= #}\n {% fb_script 'my_first_fb_app' fix_20168=True %} \n\n#### fb_script_with_canvas :: `ezfacebook.context.templatetags.fb_script.fb_script_with_canvas`\n\nRenders the Facebook Javascript SDK script required for facebook connectivity and sets the Facebook Canvas size.\n \nExample:\n \n {% load fb_script %}\n \n {% fb_script_with_canvas 'my_first_fb_app' canvas_height=2000 canvas_width=500 %} {# 500 is the recommended width for a Page Tab #}\n \n {% fb_script_with_canvas 'my_first_fb_app' canvas_height=2000 canvas_width=500 use_share=True %} {# 500 is the recommended width for a Page Tab #} {# Also loads FB.Share javascript #}\n \n {# See http://bugs.developers.facebook.net/show_bug.cgi?id=19042 #}\n {% fb_script_with_canvas 'my_first_fb_app' canvas_height=2000 canvas_width=500 fix_19042=True %} \n \n {# See http://bugs.developers.facebook.net/show_bug.cgi?id=20168= #}\n {% fb_script_with_canvas 'my_first_fb_app' canvas_height=2000 canvas_width=500 fix_20168=True %} \n\t\n# Helpers :: `ezfacebook.helpers`\n\nThis packages comes with the following features:\n\n- Middleware\n\t\n## Middleware :: `ezfacebook.helpers.middleware`\n\nThis package has middleware to help out your application.\n\n### IEIFrameApplicationMiddleware :: `ezfacebook.helpers.middleware.IEIFrameApplicationMiddleware`\n\nIt is not necessary to install this package as an app to use this middleware.\n\nSets response headers (P3P policy) to allow IE 7-8 to use cookies inside of an iframe.\nThis is useful for websites that are put in iframes on facebook, such as page tabs and facebook apps.\n\nTo use it, simply add 'ezfacebook.helpers.middleware.IEIFrameApplicationMiddleware' to MIDDLEWARE_CLASSES in your settings file. \n\n# Lib :: `ezfacebook.lib`\n\nThis packages comes with the following features:\n\n- Facebook Graph API\n- Library Functions\n\n## Adapter :: `ezfacebook.lib.adapter`\n\n### FacebookGraphAPI :: `ezfacebook.lib.adapter.FacebookGraphAPI`\n\nWrapper for the \"official\" `GraphAPI` object, the difference is that this object is aware of guid & token.\nExtend this object to add your most frequently used functions, such as posting a link to a wall, vs posting a picture to a wall...\n \nIf you extend this class, be sure to set `FACEBOOK_GRAPH_API_CLASS` in your settings file so that is used by default.\n\n### parse_signed_request :: `ezfacebook.lib.adapter.parse_signed_request`\n\nParse a signed request based on the secret and return the data (dictionary)\nReturns `None` if the signed_request did not parse properly.\n \nExample:\n \n >>> parse_signed_request(request.POST['signed_request'], 'my_secret')\n {\n u'user_id': u'1234567890', \n u'algorithm': u'HMAC-SHA256', \n u'expires': 1322683200, \n u'oauth_token': u'AAAAAABbbbcccccddddddeeeeeeeeeeeffffffffgHHHHHhhhhhhhhhhIjlkmop', \n u'user': {\n u'locale': u'en_US', \n u'country': u'us', \n u'age': {u'min': 21}\n }, \n u'issued_at': 1322676598, \n u'page': {\n u'admin': False, \n u'liked': True, \n u'id': u'46326540287'\n }\n }\n \n or \n \n >>> print parse_signed_request(request.POST['signed_request'], 'my_secret')\n None\n\n### parse_cookies :: `ezfacebook.lib.adapter.parse_cookies`\n\nParse cookies and return the Facebook GUID and Access Token found in the cookie, or `None`.\n \nExample:\n \n >>> parse_cookies(request.cookies, 'my_app_id', 'my_secret')\n ('1234567890', 'AAAAAABbbbcccccddddddeeeeeeeeeeeffffffffgHHHHHhhhhhhhhhhIjlkmop')\n \n or \n \n >>> print parse_cookies(request.cookies, 'my_app_id', 'my_secret')\n None\n\n### get_graph_from_cookies :: `ezfacebook.lib.adapter.get_graph_from_cookies`\n\nReturns a `FacebookGraphAPI` instance or subclass (as specified in the settings), or `None`, based on cookies.\n \nExample:\n \n >>> get_graph_from_cookies(request.cookies, 'my_app_id', 'my_secret')\n \n \n or \n \n >>> print get_graph_from_cookies(request.cookies, 'my_app_id', 'my_secret')\n None\n\n# User :: `ezfacebook.user`\n\nThis package is responsible for extracting user information from a request.\nCurrently this is done with the use of decorators.\nIn the future, some kind of middleware may be added.\n\nThis packages comes with the following features:\n\n- Decorators\n\n## Decorators :: `ezfacebook.user.decorators`\n\nThese decorators are used on view functions, they will inject the results as the parameter after request.\nAny other arguments or keyword arguments are still sent to the view.\n\n### parse_signed_request :: `ezfacebook.user.decorators.parse_signed_request`\n\nInjects a decrypted signed_request into your view function.\nIt can be `None`.\nA signed request is good for a lot of things, of which can be found at http://developers.facebook.com/docs/authentication/signed_request/\n\nExample:\n\n\tfrom django.conf import settings\n from django.core.urlresolvers import reverse\n from django.views.generic.simple import direct_to_template\n \n from ezfacebook.context.templatetags import absurl\n from ezfacebook.user import decorators\n\n @decorators.parse_signed_request('my_first_fb_app') # or graph_from_cookies(settings.FACEBOOK_SETTINGS.my_first_fb_app)\n def index(request, signed_request, *args, **kwargs):\n '''\n >>> print signed_request\n \n or\n >>> print signed_request\n None\n or\n >>> print signed_request # Example signed request\n {u'user_id': u'11111111111', u'algorithm': u'HMAC-SHA256', u'expires': 1322683200, u'oauth_token': u'AAAAAAAAAAAAA', \n u'user': {u'locale': u'en_US', u'country': u'us', u'age': {u'min': 21}}, u'issued_at': 1322676598, \n u'page': {u'admin': False, u'liked': True, u'id': u'46326540287'}}\n '''\n \n if signed_request:\n page = signed_request.get('page', None)\n if page:\n liked = page.get('liked', False)\n if liked:\n return direct_to_template(request, 'liked.html')\n return direct_to_template(request, 'unliked.html')\n\t\t\t\n### graph_from_cookies :: `ezfacebook.user.decorators.graph_from_cookies`\n\nInjects a `FacebookGraphAPI` (or specified subclass) into your view function.\nIt can be `None`.\n`FacebookGraphAPI` is great for making requests to facebook.com, those requests can be found at https://developers.facebook.com/docs/reference/api/\n\nExample:\n\n\tfrom django.conf import settings\n from django.core.urlresolvers import reverse\n from django.views.generic.simple import direct_to_template\n \n from ezfacebook.context.templatetags import absurl\n from ezfacebook.user import decorators\n\n @decorators.graph_from_cookies('my_first_fb_app') # or graph_from_cookies(settings.FACEBOOK_SETTINGS.my_first_fb_app)\n def post_to_wall(request, graph, *args, **kwargs):\n \n image_url = absolute_url(\"%simages/fb_image.png\" % settings.MEDIA_URL, request=request)\n link = absolute_url(reverse('myviews.index', request=request))\n \n graph.put_object(\"me\", \"feed\", picture=image_url, name='Whatsup', description='Hello', link=link, caption='Pow Mow Local')\n \n return direct_to_template(request, 'success.html')\n\t\t\t\n## Middleware :: `ezfacebook.user.middleware`\n\nThis middleware is used to apply the above decorators to all view functions.\n\n### FacebookRequestMiddleware :: `ezfacebook.user.middleware.FacebookRequestMiddleware`\n\nPut signed_request and graph in the request for each facebook app.\nLike this: `request.ezfb.my_app_name.graph` or `request.ezfb.my_app_name.signed_request`\n\nThis cleans up your code so that decorators are not everywhere. However, it does add a little bit of inefficiency when\nyour apps are not always being checked against. Decorators are ugly, but recommended.\n\nExample:\n\n from django.views.generic.simple import direct_to_template \n\n\tfrom myapp import models\n \n def my_view(request):\n \t\"\"\"\n \tAn example demonstrating some possibilities of FacebookRequestMiddleware.\n \t\"\"\"\n \t\n \t# Get or create a FacebookUser from the graph, if present.\n \n \tgraph = request.ezfb.my_first_fb_app.graph\n if graph:\n fbuser = models.FacebookUser.objects.get_or_create(facebook_guid=graph.facebook_guid)\n else:\n \tfbuser = None\n return direct_to_template(request, 'my_first_fb_app/index-liked.html', {'fbuser': fbuser})\n \n # OR!\n # Show the index page, a different version if they like my_second_fb_app\n \n signed_request = request.ezfb.my_second_fb_app.signed_request\n if signed_request:\n \tpage_data = signed_request.get('page', None)\n \tif page_data and page_data.get('liked', False):\n \t\treturn direct_to_template(request, 'my_second_fb_app/index-liked.html')\n return direct_to_template(request, 'my_second_fb_app/index-unliked.html')", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/explodes/ezfacebook", "keywords": null, "license": "Apache Software License", "maintainer": null, "maintainer_email": null, "name": "ezfacebook", "package_url": "https://pypi.org/project/ezfacebook/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/ezfacebook/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/explodes/ezfacebook" }, "release_url": "https://pypi.org/project/ezfacebook/0.87.0/", "requires_dist": null, "requires_python": null, "summary": "Django Tools to use facebook seamlessly without having to build around it.", "version": "0.87.0" }, "last_serial": 722458, "releases": { "0.75": [ { "comment_text": "", "digests": { "md5": "6a33b8181f3259e2c9caad7306a092e9", "sha256": "6fac6f7d540f1291bea633ff350c7707e6e7f13b4b4a4633af46ca0a9608ebfc" }, "downloads": -1, "filename": "ezfacebook-0.75.tar.gz", "has_sig": false, "md5_digest": "6a33b8181f3259e2c9caad7306a092e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16035, "upload_time": "2011-12-02T21:00:33", "url": "https://files.pythonhosted.org/packages/ec/76/52c94e565fd830cf6dd8ac5654c776ce3cb2f80570aa117f1a8c96108fe3/ezfacebook-0.75.tar.gz" } ], "0.75.2": [ { "comment_text": "", "digests": { "md5": "132fed6c2c1b80ab7990b0c88da2aab9", "sha256": "2293ccb371d863893c8fbb22080c868a26adb86abaf012d1f924aafbf295cfcd" }, "downloads": -1, "filename": "ezfacebook-0.75.2.tar.gz", "has_sig": false, "md5_digest": "132fed6c2c1b80ab7990b0c88da2aab9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16207, "upload_time": "2011-12-02T21:30:41", "url": "https://files.pythonhosted.org/packages/61/84/80b60af3509770f2f8e9700655745ea51777790634534ebb0b23feec2d59/ezfacebook-0.75.2.tar.gz" } ], "0.80.0": [ { "comment_text": "", "digests": { "md5": "4eebdbc353ee7466ddc71c539bb98cdd", "sha256": "ed5477a93e563a968cba9a71f1d5dce565a5d1c1197b7ddc6ea96e53e716b1e0" }, "downloads": -1, "filename": "ezfacebook-0.80.0.tar.gz", "has_sig": false, "md5_digest": "4eebdbc353ee7466ddc71c539bb98cdd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17436, "upload_time": "2011-12-06T21:32:38", "url": "https://files.pythonhosted.org/packages/27/63/261827d1ffce53f17eb5c03ad935ab7198326bec96f503248512535e51b1/ezfacebook-0.80.0.tar.gz" } ], "0.81.0": [ { "comment_text": "", "digests": { "md5": "aa035f24701e7cf3815f5fe8ab24aa10", "sha256": "4f3238905431f22d5568aa27a969b402081cd17ba5a5f2907d871c00bf5d8674" }, "downloads": -1, "filename": "ezfacebook-0.81.0.tar.gz", "has_sig": false, "md5_digest": "aa035f24701e7cf3815f5fe8ab24aa10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17541, "upload_time": "2012-02-06T16:44:18", "url": "https://files.pythonhosted.org/packages/98/ab/c11bd500b1379f2b26039b2b17bda174706ba3c3403545511651f679f68b/ezfacebook-0.81.0.tar.gz" } ], "0.82.0": [ { "comment_text": "", "digests": { "md5": "bdb94692d0aedd70b8dc03dca513810e", "sha256": "d7ddea0d048084f0a014b09626373687f2b2b40c930adabb3987c6b6f3723c05" }, "downloads": -1, "filename": "ezfacebook-0.82.0.tar.gz", "has_sig": false, "md5_digest": "bdb94692d0aedd70b8dc03dca513810e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19763, "upload_time": "2012-02-06T18:49:04", "url": "https://files.pythonhosted.org/packages/02/87/210741c1a4a9d2bdf65115b084abd8dc7b62e269593c2995e73e11f4b8c7/ezfacebook-0.82.0.tar.gz" } ], "0.83.0": [ { "comment_text": "", "digests": { "md5": "2c729d34f1681ec798a93cd99543adc0", "sha256": "30659424857d8deb2aebf07165652567f20bdd16f46f197d8c29a2e5bf1d74d6" }, "downloads": -1, "filename": "ezfacebook-0.83.0.tar.gz", "has_sig": false, "md5_digest": "2c729d34f1681ec798a93cd99543adc0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20152, "upload_time": "2012-02-08T00:33:12", "url": "https://files.pythonhosted.org/packages/68/2b/7ea1ee485c0f70f7c6580e9f07798de93babf2b6203b7cbe2831cf8dd7e9/ezfacebook-0.83.0.tar.gz" } ], "0.84.0": [ { "comment_text": "", "digests": { "md5": "fd721205dcc4aa05de7853ec198fbeeb", "sha256": "372201f9460874df7993ab18519763a01078ae5558125783c5bfb7f6eb12e11b" }, "downloads": -1, "filename": "ezfacebook-0.84.0.tar.gz", "has_sig": false, "md5_digest": "fd721205dcc4aa05de7853ec198fbeeb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20152, "upload_time": "2012-02-08T00:34:33", "url": "https://files.pythonhosted.org/packages/4b/4a/c45187cfc7dd996dda631643c3cc44a903cf656409ede6ae4f16a8a7e671/ezfacebook-0.84.0.tar.gz" } ], "0.85.0": [ { "comment_text": "", "digests": { "md5": "53d46f56acda7b79248d6f25491d010a", "sha256": "e7419b43b52ec05e1fbccc91ce60a78fd86a11722a952d417c500c27bbc8b06e" }, "downloads": -1, "filename": "ezfacebook-0.85.0.tar.gz", "has_sig": false, "md5_digest": "53d46f56acda7b79248d6f25491d010a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20172, "upload_time": "2012-02-14T23:02:18", "url": "https://files.pythonhosted.org/packages/cb/af/8c32c0375755183e44567eae7f362f2fe264003fe0a66c9dd3536da0cfbe/ezfacebook-0.85.0.tar.gz" } ], "0.86.0": [ { "comment_text": "", "digests": { "md5": "38bbdf3530df4b6ed0de599d3aff1618", "sha256": "c62215a88b797db71e5ad68e574e67f3013e50abbc5f66520b0ff2017c071b33" }, "downloads": -1, "filename": "ezfacebook-0.86.0.tar.gz", "has_sig": false, "md5_digest": "38bbdf3530df4b6ed0de599d3aff1618", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20137, "upload_time": "2012-02-14T23:04:48", "url": "https://files.pythonhosted.org/packages/72/7c/f6070d6bee5f1c3a5430c0970ed0cb3c6d2d4a04da146e8cba84a7967db7/ezfacebook-0.86.0.tar.gz" } ], "0.87.0": [ { "comment_text": "", "digests": { "md5": "35e5cfaefc9fcf4788b56391d4f79ab0", "sha256": "17fd3e4cadc1c89147bd4f5e6ac405f38195db0fbce00368952c883665d8d7d4" }, "downloads": -1, "filename": "ezfacebook-0.87.0.tar.gz", "has_sig": false, "md5_digest": "35e5cfaefc9fcf4788b56391d4f79ab0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20106, "upload_time": "2012-02-15T00:46:31", "url": "https://files.pythonhosted.org/packages/58/d6/da7e48d6f37dfcf9f8576a8a22565f67372a39838b57aa5e00f5623557fe/ezfacebook-0.87.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "35e5cfaefc9fcf4788b56391d4f79ab0", "sha256": "17fd3e4cadc1c89147bd4f5e6ac405f38195db0fbce00368952c883665d8d7d4" }, "downloads": -1, "filename": "ezfacebook-0.87.0.tar.gz", "has_sig": false, "md5_digest": "35e5cfaefc9fcf4788b56391d4f79ab0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20106, "upload_time": "2012-02-15T00:46:31", "url": "https://files.pythonhosted.org/packages/58/d6/da7e48d6f37dfcf9f8576a8a22565f67372a39838b57aa5e00f5623557fe/ezfacebook-0.87.0.tar.gz" } ] }