nagasurendra commited on
Commit
67111f2
·
verified ·
1 Parent(s): fc1ca8e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -0
app.py CHANGED
@@ -22,6 +22,10 @@ app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
22
  HF_API_TOKEN = os.getenv('HF_API_TOKEN') # Load token from environment variable
23
  HF_API_URL = "https://api-inference.huggingface.co/models/facebook/detr-resnet-50" # Example model for object detection
24
 
 
 
 
 
25
  def query_hugging_face(image_data):
26
  if not HF_API_TOKEN:
27
  logging.error("Hugging Face API token not set.")
@@ -41,6 +45,38 @@ def query_hugging_face(image_data):
41
  logging.error(f"Failed to connect to Hugging Face API: {str(e)}")
42
  return {"error": f"Failed to connect to Hugging Face API: {str(e)}"}
43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  @app.route('/')
45
  def index():
46
  return render_template('index.html')
@@ -74,6 +110,21 @@ def capture():
74
  logging.error(f"Error in capture: {str(e)}")
75
  return jsonify({'status': 'error', 'message': str(e)})
76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  @app.route('/test_connectivity')
78
  def test_connectivity():
79
  try:
 
22
  HF_API_TOKEN = os.getenv('HF_API_TOKEN') # Load token from environment variable
23
  HF_API_URL = "https://api-inference.huggingface.co/models/facebook/detr-resnet-50" # Example model for object detection
24
 
25
+ # Instagram API settings
26
+ INSTAGRAM_ACCESS_TOKEN = os.getenv('INSTAGRAM_ACCESS_TOKEN') # Load token from environment variable
27
+ INSTAGRAM_API_URL = "https://graph.instagram.com/v21.0/me/media"
28
+
29
  def query_hugging_face(image_data):
30
  if not HF_API_TOKEN:
31
  logging.error("Hugging Face API token not set.")
 
45
  logging.error(f"Failed to connect to Hugging Face API: {str(e)}")
46
  return {"error": f"Failed to connect to Hugging Face API: {str(e)}"}
47
 
48
+ def upload_to_instagram(image_path):
49
+ if not INSTAGRAM_ACCESS_TOKEN:
50
+ logging.error("Instagram access token not set.")
51
+ return {"error": "Instagram access token not set. Please set the INSTAGRAM_ACCESS_TOKEN environment variable."}
52
+ try:
53
+ # Step 1: Create media object
54
+ session = requests.Session()
55
+ retries = Retry(total=3, backoff_factor=1, status_forcelist=[502, 503, 504])
56
+ session.mount('https://', HTTPAdapter(max_retries=retries))
57
+
58
+ media_url = f"{INSTAGRAM_API_URL}?image_url={request.url_root}{image_path}&caption=Uploaded%20via%20Flask%20Camera%20App&access_token={INSTAGRAM_ACCESS_TOKEN}"
59
+ logging.debug(f"Sending media creation request to Instagram: {media_url}")
60
+ response = session.post(media_url, timeout=10)
61
+ response.raise_for_status()
62
+ media_data = response.json()
63
+
64
+ if 'id' not in media_data:
65
+ logging.error(f"Failed to create media: {media_data}")
66
+ return {"error": f"Failed to create media: {media_data}"}
67
+
68
+ # Step 2: Publish media
69
+ media_id = media_data['id']
70
+ publish_url = f"https://graph.instagram.com/v21.0/me/media_publish?creation_id={media_id}&access_token={INSTAGRAM_ACCESS_TOKEN}"
71
+ logging.debug(f"Sending publish request to Instagram: {publish_url}")
72
+ publish_response = session.post(publish_url, timeout=10)
73
+ publish_response.raise_for_status()
74
+ logging.debug("Instagram upload successful.")
75
+ return {"status": "success"}
76
+ except requests.exceptions.RequestException as e:
77
+ logging.error(f"Failed to upload to Instagram: {str(e)}")
78
+ return {"error": f"Failed to upload to Instagram: {str(e)}"}
79
+
80
  @app.route('/')
81
  def index():
82
  return render_template('index.html')
 
110
  logging.error(f"Error in capture: {str(e)}")
111
  return jsonify({'status': 'error', 'message': str(e)})
112
 
113
+ @app.route('/upload_instagram', methods=['POST'])
114
+ def upload_instagram():
115
+ try:
116
+ image_url = request.form['image_url']
117
+ if not image_url.startswith('/static/captures/'):
118
+ return jsonify({'status': 'error', 'message': 'Invalid image path.'})
119
+
120
+ result = upload_to_instagram(image_url.lstrip('/'))
121
+ if 'error' in result:
122
+ return jsonify({'status': 'error', 'message': result['error']})
123
+ return jsonify({'status': 'success'})
124
+ except Exception as e:
125
+ logging.error(f"Error in upload_instagram: {str(e)}")
126
+ return jsonify({'status': 'error', 'message': str(e)})
127
+
128
  @app.route('/test_connectivity')
129
  def test_connectivity():
130
  try: