From 29011dff064f367960f7bade4907ce5e84c589ea Mon Sep 17 00:00:00 2001 From: bobbyvish Date: Wed, 17 Jul 2024 00:37:06 +0530 Subject: [PATCH 1/2] feat(socialmedia):added twitter service --- goodtimes/services.py | 39 +++++++++++++++++++++++++++++++++++++- goodtimes/settings/base.py | 6 ++++++ requirements.txt | 3 ++- 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/goodtimes/services.py b/goodtimes/services.py index e2faeb2..ad2fcf7 100644 --- a/goodtimes/services.py +++ b/goodtimes/services.py @@ -1,5 +1,6 @@ import random import googlemaps +import tweepy from django.conf import settings from django.core.files.uploadedfile import UploadedFile from django.core.mail import EmailMessage @@ -745,7 +746,7 @@ class GoogleMapsservice: def get_place_id_from_coordinates(self, latitude, longitude): """ Get the place ID of the given coordinates. - + :param latitude: Latitude of the location :param longitude: Longitude of the location :return: Place ID @@ -817,3 +818,39 @@ class GoogleMapsservice: # queryset = queryset.order_by(preserved_order) return queryset + + +class TwitterAPI: + def __init__(self): + self.api_key = settings.TWITTER_API_KEY + self.api_secret_key = settings.TWITTER_API_SECRET_KEY + self.access_token = settings.TWITTER_ACCESS_TOKEN + self.access_token_secret = settings.TWITTER_ACCESS_TOKEN_SECRET + self.auth = self._setup_auth() + self.api = self._setup_api() + + def _setup_auth(self): + auth = tweepy.OAuthHandler(self.api_key, self.api_secret_key) + auth.set_access_token(self.access_token, self.access_token_secret) + return auth + + def _setup_api(self): + api = tweepy.API(self.auth) + return api + + def post_image_with_caption(self, image_path, caption): + media = self.api.media_upload(image_path) + tweet = self.api.update_status(status=caption, media_ids=[media.media_id]) + return tweet + + +class TwitterPoster: + def __init__(self, twitter_api): + self.twitter_api = twitter_api + + def post_tweet(self, image_path, caption): + try: + tweet = self.twitter_api.post_image_with_caption(image_path, caption) + return {'success': True, 'message': 'Tweet posted successfully!'} + except tweepy.TweepError as e: + return {'success': False, 'message': f'Error posting tweet: {e}'} \ No newline at end of file diff --git a/goodtimes/settings/base.py b/goodtimes/settings/base.py index 5476155..ee53e38 100644 --- a/goodtimes/settings/base.py +++ b/goodtimes/settings/base.py @@ -339,3 +339,9 @@ PLACES_MAPS_API_KEY = env.str("GOOGLE_MAPS_API_KEY") PLACES_MAP_WIDGET_HEIGHT = 480 PLACES_MAP_OPTIONS = '{"center": { "lat": 38.971584, "lng": -95.235072 }, "zoom": 10}' PLACES_MARKER_OPTIONS = '{"draggable": true}' + +# twitter keys +TWITTER_API_KEY = env.str("TWITTER_API_KEY") +TWITTER_API_SECRET_KEY = env.str("TWITTER_API_SECRET_KEY") +TWITTER_ACCESS_TOKEN = env.str("TWITTER_ACCESS_TOKEN") +TWITTER_ACCESS_TOKEN_SECRET = env.str("TWITTER_ACCESS_TOKEN_SECRET") \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 3d196bc..f3ae9d8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -69,8 +69,9 @@ sniffio==1.3.1 sqlparse==0.4.4 stripe==8.2.0 tqdm==4.66.2 +tweepy==4.14.0 Twisted==23.10.0 -# twisted-iocpsupport==1.0.4 +twisted-iocpsupport==1.0.4 txaio==23.1.1 typing_extensions==4.9.0 tzdata==2024.1 From 33030ca7281e3319704b21a64f51d6805adf48b1 Mon Sep 17 00:00:00 2001 From: bobbyvish Date: Thu, 25 Jul 2024 00:48:24 +0530 Subject: [PATCH 2/2] feat(socialmedia):post event to social media --- goodtimes/services.py | 262 ++++++++++++++++-- goodtimes/settings/base.py | 11 +- .../management/commands/test_facebook_api.py | 31 +++ .../management/commands/test_instagram_api.py | 34 +++ .../management/commands/test_twitter_api.py | 28 ++ manage_events/urls.py | 2 + manage_events/views.py | 50 ++++ static/img/facebook.png | Bin 0 -> 3210 bytes static/img/forward_all_icon.png | Bin 0 -> 8660 bytes static/img/instagram.png | Bin 0 -> 38538 bytes static/img/x_twitter.png | Bin 0 -> 16807 bytes templates/manage_events/event_details.html | 150 +++++++++- 12 files changed, 544 insertions(+), 24 deletions(-) create mode 100644 manage_events/management/commands/test_facebook_api.py create mode 100644 manage_events/management/commands/test_instagram_api.py create mode 100644 manage_events/management/commands/test_twitter_api.py create mode 100644 static/img/facebook.png create mode 100644 static/img/forward_all_icon.png create mode 100644 static/img/instagram.png create mode 100644 static/img/x_twitter.png diff --git a/goodtimes/services.py b/goodtimes/services.py index ad2fcf7..221b622 100644 --- a/goodtimes/services.py +++ b/goodtimes/services.py @@ -1,4 +1,5 @@ import random +import requests import googlemaps import tweepy from django.conf import settings @@ -826,21 +827,31 @@ class TwitterAPI: self.api_secret_key = settings.TWITTER_API_SECRET_KEY self.access_token = settings.TWITTER_ACCESS_TOKEN self.access_token_secret = settings.TWITTER_ACCESS_TOKEN_SECRET - self.auth = self._setup_auth() - self.api = self._setup_api() - - def _setup_auth(self): - auth = tweepy.OAuthHandler(self.api_key, self.api_secret_key) - auth.set_access_token(self.access_token, self.access_token_secret) - return auth + self.client, self.api = self._setup_api() def _setup_api(self): - api = tweepy.API(self.auth) - return api + client = tweepy.Client( + consumer_key=self.api_key, + consumer_secret=self.api_secret_key, + access_token=self.access_token, + access_token_secret=self.access_token_secret, + ) + auth = tweepy.OAuth1UserHandler( + self.api_key, + self.api_secret_key, + self.access_token, + self.access_token_secret, + ) + api = tweepy.API(auth, wait_on_rate_limit=True) + return client, api - def post_image_with_caption(self, image_path, caption): - media = self.api.media_upload(image_path) - tweet = self.api.update_status(status=caption, media_ids=[media.media_id]) + def post_text_tweet(self, caption): + tweet = self.client.create_tweet(text=caption) + return tweet + + def post_image_with_caption(self, image_url, caption): + media = self.api.media_upload(image_url) + tweet = self.client.create_tweet(text=caption, media_ids=[media.media_id]) return tweet @@ -848,9 +859,228 @@ class TwitterPoster: def __init__(self, twitter_api): self.twitter_api = twitter_api - def post_tweet(self, image_path, caption): + def post_text_tweet(self, caption): try: - tweet = self.twitter_api.post_image_with_caption(image_path, caption) + tweet = self.twitter_api.post_text_tweet(caption) return {'success': True, 'message': 'Tweet posted successfully!'} - except tweepy.TweepError as e: - return {'success': False, 'message': f'Error posting tweet: {e}'} \ No newline at end of file + except tweepy.TweepyException as e: + return {'success': False, 'message': f'Error posting tweet: {e}'} + + def post_image_with_caption(self, image_url, caption): + try: + tweet = self.twitter_api.post_image_with_caption(image_url, caption) + return {'success': True, 'message': 'Tweet posted successfully!'} + except tweepy.TweepyException as e: + return {'success': False, 'message': f'Error posting tweet: {e}'} + +class FacebookAPI: + def __init__(self): + self.app_id = settings.FACEBOOK_APP_ID + self.app_secret = settings.FACEBOOK_APP_SECRET + self.page_id = settings.FACEBOOK_PAGE_ID + self.page_access_token = None + + def _get_short_lived_user_access_token(self): + try: + url = f"https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id={self.app_id}&client_secret={self.app_secret}" + response = requests.get(url) + response.raise_for_status() + print(f"short lived token {response.json()}") + return response.json()['access_token'] + except requests.exceptions.RequestException as e: + print(f"Error getting short-lived user access token: {e}") + return None + + def _get_long_lived_user_access_token(self, short_lived_token): + try: + url = f"https://graph.facebook.com/v20.0/oauth/access_token?grant_type=fb_exchange_token&client_id={self.app_id}&client_secret={self.app_secret}&fb_exchange_token={short_lived_token}" + response = requests.get(url) + response.raise_for_status() + print(f"long lived access token : {response.json()}") + return response.json()['access_token'] + except requests.exceptions.RequestException as e: + print(f"Error getting long-lived user access token: {e}") + return None + + def _get_page_access_token(self, long_lived_token): + url = f"https://graph.facebook.com/{self.page_id}?fields=access_token&access_token={long_lived_token}" + response = requests.get(url) + # response.raise_for_status() + print(f"page access token is {response.json()}") + # self.page_access_token = response.json()["access_token"] + + def authenticate(self): + # short_lived_token = self._get_short_lived_user_access_token() + # if not short_lived_token: + # return False + # long_lived_token = self._get_long_lived_user_access_token(short_lived_token) + # if not long_lived_token: + # return False + # self._get_page_access_token(short_lived_token) + self.page_access_token = settings.FACEBOOK_ACCESS_TOKEN + return True + + def post_photo(self, image_url, caption): + if not self.page_access_token: + print("Page access token not obtained. Call authenticate() first.") + return False + try: + url = f"https://graph.facebook.com/v20.0/{self.page_id}/photos" + params = { + "message": caption, + "url": image_url, + "access_token": self.page_access_token, + } + response = requests.post(url, params=params) + response.raise_for_status() + result = response.json() + if "id" not in result: + print(f"Error posting photo: {result}") + return False + print(f"Data posted successfully. Post Id: {result['id']}") + return True + except requests.exceptions.RequestException as e: + print(f"Error posting photo: {e}") + return False + +class FacebookPoster: + def __init__(self, facebook_api): + self.facebook_api = facebook_api + + def post_photo(self, image_url, caption): + if not self.facebook_api.authenticate(): + print("Authentication failed. Please try again.") + return {'success': False, 'message': 'Error posting photo. Authenticate failed'} + result = self.facebook_api.post_photo(image_url, caption) + if not result: + return {'success': False, 'message': 'Error posting photo'} + return {'success': True, 'message': 'Photo posted successfully'} + + + +# import requests + +# app_id = "YOUR_APP_ID" +# app_secret = "YOUR_APP_SECRET" +# page_id = "YOUR_PAGE_ID" # You need to specify the page ID +# # Step 1: Get an App Access Token +# response = requests.get(f"https://graph.facebook.com/oauth/access_token?client_id={app_id}&client_secret={app_secret}&grant_type=client_credentials") +# app_access_token = response.json()["access_token"] + +# # Step 2: Get a Page Access Token +# response = requests.get(f"https://graph.facebook.com/{page_id}?fields=access_token&access_token={app_access_token}") +# page_access_token = response.json()["access_token"] + +# # Use the Page Access Token to query the Page node +# response = requests.get(f"https://graph.facebook.com/{page_id}?access_token={page_access_token}") +# page_data = response.json() +# print(page_data) +class InstagramAPI: + def __init__(self): + self.app_id = settings.FACEBOOK_APP_ID + self.app_secret = settings.FACEBOOK_APP_SECRET + self.page_id = settings.INSTAGRAM_PAGE_ID + self.page_access_token = None + + def _get_short_lived_user_access_token(self): + try: + url = f"https://graph.facebook.com/oauth/access_token" + params = { + "grant_type": "client_credentials", + "client_id": self.app_id, + "client_secret": self.app_secret + } + response = requests.get(url, params=params) + response.raise_for_status() + print(f"Short-lived token: {response.json()}") + return response.json()['access_token'] + except requests.exceptions.RequestException as e: + print(f"Error getting short-lived user access token: {e}") + return None + + def _get_long_lived_user_access_token(self, short_lived_token): + try: + url = f"https://graph.facebook.com/v20.0/oauth/access_token" + params = { + "grant_type": "fb_exchange_token", + "client_id": self.app_id, + "client_secret": self.app_secret, + "fb_exchange_token": short_lived_token + } + response = requests.get(url, params=params) + response.raise_for_status() + print(f"Long-lived access token: {response.json()}") + return response.json()['access_token'] + except requests.exceptions.RequestException as e: + print(f"Error getting long-lived user access token: {e}") + return None + + def _get_page_access_token(self, long_lived_token): + try: + url = f"https://graph.facebook.com/{self.page_id}" + params = { + "fields": "access_token", + "access_token": long_lived_token + } + response = requests.get(url, params=params) + response.raise_for_status() + print(f"Page access token: {response.json()}") + return response.json()["access_token"] + except requests.exceptions.RequestException as e: + print(f"Error getting page access token: {e}") + return None + + def authenticate(self): + # short_lived_token = self._get_short_lived_user_access_token() + # if not short_lived_token: + # return False + # long_lived_token = self._get_long_lived_user_access_token(short_lived_token) + # if not long_lived_token: + # return False + # self.page_access_token = self._get_page_access_token(long_lived_token) + self.page_access_token = settings.FACEBOOK_ACCESS_TOKEN + return True + + def post_image_with_caption(self, image_path, caption): + image_path="https://admin.goodtimesltd.co.uk/static/img/goodtimes.png" + if not self.page_access_token: + print("Page access token not obtained. Call Authenticate() first.") + return False + try: + url = f"https://graph.facebook.com/v20.0/{self.page_id}/media" + params = { + "caption": caption, + "image_url": image_path, + "access_token": self.page_access_token + } + response = requests.post(url, data=params) + response.raise_for_status() + result = response.json() + print(f"Post image with caption result: {result['id']}") + + url = f"https://graph.facebook.com/v20.0/{self.page_id}/media_publish" + params = { + "creation_id": result["id"], + "access_token": self.page_access_token + } + response = requests.post(url, params=params) + response.raise_for_status() + result = response.json() + return True + except requests.exceptions.RequestException as e: + print(f"Error posting photo on instagram: {e}") + return False + + +class InstagramPoster: + def __init__(self, instagram_api): + self.instagram_api = instagram_api + + def post_image_with_caption(self, image_path, caption): + if not self.instagram_api.authenticate(): + print("Instagram API authentication failed.") + return {'success': False, 'message': 'Error posting photo. Authenticate failed'} + result = self.instagram_api.post_image_with_caption(image_path, caption) + if not result: + return {'success': False, 'message': 'Error posting photo.'} + return {'success': True, 'message': 'Photo posted successfully'} \ No newline at end of file diff --git a/goodtimes/settings/base.py b/goodtimes/settings/base.py index ee53e38..b6abe36 100644 --- a/goodtimes/settings/base.py +++ b/goodtimes/settings/base.py @@ -344,4 +344,13 @@ PLACES_MARKER_OPTIONS = '{"draggable": true}' TWITTER_API_KEY = env.str("TWITTER_API_KEY") TWITTER_API_SECRET_KEY = env.str("TWITTER_API_SECRET_KEY") TWITTER_ACCESS_TOKEN = env.str("TWITTER_ACCESS_TOKEN") -TWITTER_ACCESS_TOKEN_SECRET = env.str("TWITTER_ACCESS_TOKEN_SECRET") \ No newline at end of file +TWITTER_ACCESS_TOKEN_SECRET = env.str("TWITTER_ACCESS_TOKEN_SECRET") + +# facebook keys +FACEBOOK_APP_ID = env.str("FACEBOOK_APP_ID") +FACEBOOK_APP_SECRET = env.str("FACEBOOK_APP_SECRET") +FACEBOOK_PAGE_ID = env.str("FACEBOOK_PAGE_ID") +FACEBOOK_ACCESS_TOKEN = env.str("FACEBOOK_ACCESS_TOKEN") + +# Instagram Key +INSTAGRAM_PAGE_ID = env.str('INSTAGRAM_PAGE_ID') diff --git a/manage_events/management/commands/test_facebook_api.py b/manage_events/management/commands/test_facebook_api.py new file mode 100644 index 0000000..efbc3c5 --- /dev/null +++ b/manage_events/management/commands/test_facebook_api.py @@ -0,0 +1,31 @@ +import os +from django.conf import settings +from django.core.management.base import BaseCommand +from goodtimes.services import FacebookAPI, FacebookPoster +from ...models import Event + +class Command(BaseCommand): + help = 'Test facebook posting functionality' + + def handle(self, *args, **kwargs): + event = Event.objects.get(id=20) + if not event: + self.stdout.write(self.style.ERROR("No event found.")) + + if not event.image: + self.stdout.write(self.style.ERROR("No image found.")) + + base_domain = settings.BASE_DOMAIN + image_path = f"{base_domain}{event.image.url}" + print(f"complete path of image {image_path}") + caption = f"{event.title}\nDuration: {event.start_date} to {event.end_date}\nAddress: {event.venue.address}" + + facebook_api = FacebookAPI() + facebook_poster = FacebookPoster(facebook_api) + + response = facebook_poster.post_photo(image_path, caption) + + if response['success']: + self.stdout.write(self.style.SUCCESS(response['message'])) + else: + self.stdout.write(self.style.ERROR(response['message'])) diff --git a/manage_events/management/commands/test_instagram_api.py b/manage_events/management/commands/test_instagram_api.py new file mode 100644 index 0000000..5717284 --- /dev/null +++ b/manage_events/management/commands/test_instagram_api.py @@ -0,0 +1,34 @@ +import os +from django.conf import settings +from django.core.management.base import BaseCommand +from goodtimes.services import InstagramAPI, InstagramPoster +from ...models import Event +import urllib.request + +class Command(BaseCommand): + help = 'Test Instagram posting functionality' + + def handle(self, *args, **kwargs): + event = Event.objects.get(id=20) + if not event: + self.stdout.write(self.style.ERROR("No event found.")) + + if not event.image: + self.stdout.write(self.style.ERROR("No image found.")) + + # base_domain = settings.BASE_DOMAIN + # image_path = f"{base_domain}{event.image.url}" + image_path = event.image.url + print(f"complete path of image {image_path}") + + caption = f"{event.title}\nDuration: {event.start_date} to {event.end_date}\nAddress: {event.venue.address}" + + instagram_api = InstagramAPI() + instagram_poster = InstagramPoster(instagram_api) + + response = instagram_poster.post_image_with_caption(image_path, caption) + + if response['success']: + self.stdout.write(self.style.SUCCESS(response['message'])) + else: + self.stdout.write(self.style.ERROR(response['message'])) diff --git a/manage_events/management/commands/test_twitter_api.py b/manage_events/management/commands/test_twitter_api.py new file mode 100644 index 0000000..2c79553 --- /dev/null +++ b/manage_events/management/commands/test_twitter_api.py @@ -0,0 +1,28 @@ +import os +from django.core.management.base import BaseCommand +from goodtimes.services import TwitterAPI, TwitterPoster +from ...models import Event + +class Command(BaseCommand): + help = 'Test Twitter posting functionality' + + def handle(self, *args, **kwargs): + event = Event.objects.get(id=19) + if not event: + self.stdout.write(self.style.ERROR("No event found.")) + + if not event.image: + self.stdout.write(self.style.ERROR("No image found.")) + + image_path = event.image.path + caption = f"{event.title}\nDuration: {event.start_date} to {event.end_date}\nAddress: {event.venue.address}" + + twitter_api = TwitterAPI() + twitter_poster = TwitterPoster(twitter_api) + + response = twitter_poster.post_image_with_caption(image_path, caption) + + if response['success']: + self.stdout.write(self.style.SUCCESS(response['message'])) + else: + self.stdout.write(self.style.ERROR(response['message'])) diff --git a/manage_events/urls.py b/manage_events/urls.py index bcc3182..1f52b7b 100644 --- a/manage_events/urls.py +++ b/manage_events/urls.py @@ -99,4 +99,6 @@ urlpatterns = [ views.GenerateEventReportView.as_view(), name="generate_event_report", ), + + path("post-to-social-media///", views.SocialMediaPostView.as_view(), name="social_media_post") ] diff --git a/manage_events/views.py b/manage_events/views.py index 45184b1..2381ede 100644 --- a/manage_events/views.py +++ b/manage_events/views.py @@ -1,5 +1,6 @@ from django.shortcuts import get_object_or_404, redirect, render from accounts import resource_action +from goodtimes.services import FacebookAPI, FacebookPoster, InstagramAPI, InstagramPoster, TwitterAPI, TwitterPoster from goodtimes.utils import JsonResponseUtil from manage_events.api.serializers import VenueSerializer, VenueShortSerializer from manage_events.forms import ( @@ -553,3 +554,52 @@ class GenerateEventReportView(generic.View): response["Content-Disposition"] = f'attachment; filename="{filename}"' return response + +class SocialMediaPostView(generic.View): + def get(self, request, *args, **kwargs): + platform = kwargs.get("platform") + event_id = kwargs.get("id") + print(platform, event_id) + errors = [] + + try: + event = Event.objects.get(id=event_id) + except Event.DoesNotExist: + errors.append("Event does not exist") + return JsonResponseUtil.error(message=errors, errors=errors) + + if not event.active: + errors.append("Event is not active") + return JsonResponseUtil.error(message=errors, errors=errors) + + caption = f"{event.title}\nDuration: {event.start_date} to {event.end_date}\nAddress: {event.venue.address}" + print(f"image url and caption is {caption}") + if platform in ['instagram', 'facebook', 'twitter', 'all']: + + if platform in ['twitter', 'all']: + image_url = event.image.path + twitter_api = TwitterAPI() + twitter_poster = TwitterPoster(twitter_api) + result = twitter_poster.post_image_with_caption(image_url, caption) + if not result['success']: + errors.append(result['message']) + + image_url = request.build_absolute_uri(event.image.url) # fb and insta require complete path with domain + if platform in ['facebook', 'all']: + facebook_api = FacebookAPI() + facebook_poster = FacebookPoster(facebook_api) + result = facebook_poster.post_photo(image_url, caption) + if not result["success"]: + errors.append(result["message"]) + + if platform in ['instagram', 'all']: + instagram_api = InstagramAPI() + instagram_poster = InstagramPoster(instagram_api) + result = instagram_poster.post_image_with_caption(image_url, caption) + if not result["success"]: + errors.append(result["message"]) + + if not errors: + return JsonResponseUtil.success(message='Post Successful') + + return JsonResponseUtil.error(message=errors, errors=errors) diff --git a/static/img/facebook.png b/static/img/facebook.png new file mode 100644 index 0000000000000000000000000000000000000000..8400a87c25206fd2acabf17131bced63dc4b30e4 GIT binary patch literal 3210 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 literal 0 HcmV?d00001 diff --git a/static/img/forward_all_icon.png b/static/img/forward_all_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6b6f4d16be602a95fdfb2b47f9cef224abf5ec60 GIT binary patch literal 8660 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 literal 0 HcmV?d00001 diff --git a/static/img/instagram.png b/static/img/instagram.png new file mode 100644 index 0000000000000000000000000000000000000000..b61a96570af161afc8681ad9e85250982dfd434e GIT binary patch literal 38538 zcmW(+WkAzk7yhka^ypMZOSgo?Mu(K7fTSWFf^=+j2`GYuzyw4>%0DF%qXdIiLApa) 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 z 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