diff --git a/goodtimes/services.py b/goodtimes/services.py index 221b622..c28b41c 100644 --- a/goodtimes/services.py +++ b/goodtimes/services.py @@ -884,7 +884,7 @@ class FacebookAPI: 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() + # response.raise_for_status() print(f"short lived token {response.json()}") return response.json()['access_token'] except requests.exceptions.RequestException as e: @@ -895,7 +895,7 @@ class FacebookAPI: 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() + # response.raise_for_status() print(f"long lived access token : {response.json()}") return response.json()['access_token'] except requests.exceptions.RequestException as e: @@ -932,14 +932,14 @@ class FacebookAPI: "access_token": self.page_access_token, } response = requests.post(url, params=params) - response.raise_for_status() + # 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: + except Exception as e: print(f"Error posting photo: {e}") return False @@ -953,7 +953,7 @@ class FacebookPoster: 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': False, 'message': 'Error posting photo in Facebook'} return {'success': True, 'message': 'Photo posted successfully'} @@ -1026,7 +1026,7 @@ class InstagramAPI: response.raise_for_status() print(f"Page access token: {response.json()}") return response.json()["access_token"] - except requests.exceptions.RequestException as e: + except Exception as e: print(f"Error getting page access token: {e}") return None @@ -1042,7 +1042,6 @@ class InstagramAPI: 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 @@ -1054,9 +1053,9 @@ class InstagramAPI: "access_token": self.page_access_token } response = requests.post(url, data=params) - response.raise_for_status() + # response.raise_for_status() result = response.json() - print(f"Post image with caption result: {result['id']}") + print(f"Post image with caption result: {result}") url = f"https://graph.facebook.com/v20.0/{self.page_id}/media_publish" params = { @@ -1064,10 +1063,10 @@ class InstagramAPI: "access_token": self.page_access_token } response = requests.post(url, params=params) - response.raise_for_status() + # response.raise_for_status() result = response.json() return True - except requests.exceptions.RequestException as e: + except Exception as e: print(f"Error posting photo on instagram: {e}") return False @@ -1082,5 +1081,5 @@ class InstagramPoster: 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': False, 'message': 'Error posting photo in Instagram.'} return {'success': True, 'message': 'Photo posted successfully'} \ No newline at end of file diff --git a/goodtimes/utils.py b/goodtimes/utils.py index 9fd4742..d85f258 100644 --- a/goodtimes/utils.py +++ b/goodtimes/utils.py @@ -59,8 +59,6 @@ class JsonResponseUtil: response_data["errors"] = errors return JsonResponse(response_data, status=status) - - class RandomGenerator: @staticmethod def number(start, end): diff --git a/manage_events/management/commands/test_facebook_api.py b/manage_events/management/commands/test_facebook_api.py index efbc3c5..5f0a2e3 100644 --- a/manage_events/management/commands/test_facebook_api.py +++ b/manage_events/management/commands/test_facebook_api.py @@ -15,8 +15,7 @@ class Command(BaseCommand): 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 = f"{settings.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}" diff --git a/manage_events/management/commands/test_instagram_api.py b/manage_events/management/commands/test_instagram_api.py index 5717284..a5c689e 100644 --- a/manage_events/management/commands/test_instagram_api.py +++ b/manage_events/management/commands/test_instagram_api.py @@ -16,9 +16,8 @@ class Command(BaseCommand): 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 + image_path = f"{settings.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}" diff --git a/manage_events/views.py b/manage_events/views.py index 2381ede..939e708 100644 --- a/manage_events/views.py +++ b/manage_events/views.py @@ -533,7 +533,7 @@ class CustomerVenueFilterView(LoginRequiredMixin, generic.View): User = get_user_model() from .report import generate_event_report, generate_event_report_pdf_three -from django.http import HttpResponse +from django.http import HttpResponse, JsonResponse class GenerateEventReportView(generic.View): @@ -561,45 +561,70 @@ class SocialMediaPostView(generic.View): event_id = kwargs.get("id") print(platform, event_id) errors = [] + success_messages = [] try: event = Event.objects.get(id=event_id) except Event.DoesNotExist: errors.append("Event does not exist") - return JsonResponseUtil.error(message=errors, errors=errors) + return JsonResponse({ + 'message': "Error in posting to social media", + 'errors': errors, + 'success_messages': success_messages + }, status=400) if not event.active: errors.append("Event is not active") - return JsonResponseUtil.error(message=errors, errors=errors) + return JsonResponse({ + 'message': "Error in posting to social media", + 'errors': errors, + 'success_messages': success_messages + }, status=400) 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 ['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']) + if result['success']: + success_messages.append("Posted to Twitter successfully") + else: + errors.append("Fail to post on Twitter") - image_url = request.build_absolute_uri(event.image.url) # fb and insta require complete path with domain + image_url = request.build_absolute_uri(event.image.url) 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 result["success"]: + success_messages.append("Posted to Facebook successfully") + else: + errors.append("Fail to post on Facebook") 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 result["success"]: + success_messages.append("Posted to Instagram successfully") + else: + errors.append("Fail to post on Instagram") if not errors: - return JsonResponseUtil.success(message='Post Successful') + return JsonResponse({'message': 'Post Successful', 'errors': errors, 'success_messages': success_messages}) - return JsonResponseUtil.error(message=errors, errors=errors) + if errors and success_messages: + return JsonResponse({ + 'message': 'Some posts succeeded while others failed', + 'errors': errors, + 'success_messages': success_messages + }, status=200) + + return JsonResponse({ + 'message': 'Error in posting to social media', + 'errors': errors, + 'success_messages': success_messages + }, status=400) \ No newline at end of file diff --git a/templates/manage_events/event_details.html b/templates/manage_events/event_details.html index 1fa11b3..7d5ed7a 100644 --- a/templates/manage_events/event_details.html +++ b/templates/manage_events/event_details.html @@ -252,26 +252,43 @@ console.log(response); Swal.close(); - if (response.status === 200) { + if (response.success_messages && response.errors && response.errors.length === 0) { + let successMessages = response.success_messages.join("
"); Swal.fire({ icon: "success", title: "Success", - text: response.message + html: response.message + "
" + successMessages }); - } else if (response.status === 403) { + } else if (response.errors && response.success_messages) { + let errorMessages = response.errors.join("
"); + let successMessages = response.success_messages.join("
"); + Swal.fire({ + icon: "warning", + title: "Partial Success", + html: response.message + "
Successes:
" + successMessages + "
Failures:
" + errorMessages + }); + } else if (response.errors) { + let errorMessages = response.errors.join("
"); + Swal.fire({ + icon: "error", + title: "Failures", + html: response.message + "
" + errorMessages + }); + } else { Swal.fire({ icon: "error", title: "Error", - text: response.message + text: "Unknown error occurred" }); } }, error: function(xhr, status, error) { Swal.close(); + var errorMessage = xhr.responseJSON && xhr.responseJSON.message ? xhr.responseJSON.message : "Something went wrong. Please try again later."; Swal.fire({ icon: "error", title: "Error", - text: "Something went wrong. Please try again later." + text: errorMessage }); } }); @@ -280,5 +297,7 @@ }); }); + + {%endblock javascript%} \ No newline at end of file