salomonsky commited on
Commit
d96f32a
·
1 Parent(s): bfac82e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +38 -103
app.py CHANGED
@@ -1,114 +1,49 @@
1
- import streamlit as st
2
- from facebook_business.api import FacebookAdsApi
3
- from facebook_business.exceptions import FacebookRequestError
4
- from facebook_business.adobjects.page import Page
5
- from facebook_business.adobjects.adaccount import AdAccount
6
- import tempfile
7
- import requests
8
-
9
- DEFAULT_ACCESS_TOKEN = '9e091d417ece2f1b1e1f83d47d6a0ec1'
10
- DEFAULT_VIDEO_PATH = 'reel.mp4'
11
 
12
- def subir_video():
13
- st.header("Paso 1: Subir Video o Reel")
14
-
15
- # Campo de selección de radio para elegir entre video personalizado o reel por defecto
16
- opcion = st.radio("Selecciona una opción:", ("Subir Video", "Utilizar Reel por Defecto"))
17
 
18
- if opcion == "Subir Video":
19
- video_file = st.file_uploader("Selecciona un archivo MP4", type=["mp4"])
20
- if video_file is None:
21
- st.warning("Por favor, selecciona un archivo MP4 para continuar.")
22
- st.stop()
23
-
24
- st.video(video_file)
25
-
26
- with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as temp_file:
27
- temp_path = temp_file.name
28
- temp_file.write(video_file.read())
29
-
30
- return temp_path, "Video Personalizado"
31
- else:
32
- return DEFAULT_VIDEO_PATH, "Reel por Defecto"
33
-
34
- def conectar_facebook(page_id):
35
- try:
36
- FacebookAdsApi.init(DEFAULT_ACCESS_TOKEN, api_version='v10.0')
37
- page = Page(page_id)
38
- page.api_get(fields=["id"])
39
- st.success("Conexión exitosa con Facebook.")
40
- return page
41
- except FacebookRequestError as e:
42
- st.error(f"Error al conectar con Facebook: {e}")
43
- if hasattr(e, 'response') and e.response:
44
- st.error(f"Detalles del error: {e.response.text}")
45
- st.stop()
46
 
47
- def obtener_informacion_pagina(page_id):
48
- try:
49
- access_token = DEFAULT_ACCESS_TOKEN
50
- url = f'https://graph.facebook.com/v10.0/{page_id}?access_token={access_token}'
51
- response = requests.get(url)
52
- data = response.json()
53
- return data
54
- except Exception as e:
55
- st.error(f"Error al obtener información de la página: {e}")
56
- st.stop()
57
 
58
- def subir_a_facebook(video_path, description, page, is_reel):
59
  try:
60
- account = AdAccount(f"act_{page['id']}")
61
-
62
- additional_params = {'published': False, 'is_instagram_eligible': True}
63
-
64
- video_params = {
65
- 'title': 'Título del video' if is_reel else None, # Título solo para reel
66
- 'description': description,
67
- 'source': open(video_path, 'rb'),
68
- **additional_params
69
- }
70
 
71
- video = account.create_video(params=video_params)
 
72
 
73
- if is_reel:
74
- reel = page.create_reel(
75
- media_url=video_path,
76
- description=description,
77
- published=False,
78
- video_id=video['id']
79
- )
80
- reel.api_update()
81
 
82
- st.success("Video subido exitosamente a Facebook.")
83
- except FacebookRequestError as e:
84
- st.error(f"Error al subir video a Facebook: {e}")
85
- if hasattr(e, 'response') and e.response:
86
- st.error(f"Detalles del error: {e.response.text}")
87
- st.stop()
88
 
89
- def main():
90
- st.title("App para Subir Videos a Facebook")
91
-
92
- # Eliminamos la entrada del usuario para el token y utilizamos el token predeterminado
93
- access_token = DEFAULT_ACCESS_TOKEN
94
-
95
- video_path, video_type = subir_video()
96
- page_id = '108592224897536' # Coloca tu ID de página
97
- page = conectar_facebook(page_id)
98
-
99
- if video_type == "Reel por Defecto":
100
- description = st.text_area("Descripción del Reel (máximo 3 líneas)", height=3)
101
- else:
102
- description = st.text_area("Título del Video (máximo 3 líneas)", height=3)
103
 
104
- # Obtener información de la página
105
- info_pagina = obtener_informacion_pagina(page_id)
106
- st.header("Información de la Página:")
107
- st.json(info_pagina)
 
 
108
 
109
- subir_a_facebook(video_path, description, page, video_type == "Reel por Defecto")
110
-
111
- st.header("Proceso completo")
112
-
113
- if __name__ == "__main__":
114
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
 
2
+ page_id = '' # Coloca tu ID de página
 
 
 
 
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
+ import request
6
+ import tempfile
7
+ from facebook_business.api import FacebookAdsApi
8
+ from facebook_business.adobjects.adaccount import AdAccount
9
+ from facebook_business.adobjects.advideo import AdVideo
10
+ from facebook_business.adobjects.page import Page
 
 
 
 
11
 
12
+ def subir_video_a_pagina(app_id, app_secret, access_token, page_id, video_path, video_name, video_description, publish=False):
13
  try:
14
+ # Inicializa la API de Facebook Ads
15
+ FacebookAdsApi.init(app_id, app_secret, access_token, api_version='v10.0')
 
 
 
 
 
 
 
 
16
 
17
+ # Crea un objeto AdAccount
18
+ account = AdAccount('act_tu_ad_account_id')
19
 
20
+ # Crea un objeto AdVideo
21
+ video = AdVideo(parent_id=account.get_id_assured())
 
 
 
 
 
 
22
 
23
+ # Sube un archivo de video
24
+ video['source'] = AdVideo.Video(video_path=video_path)
 
 
 
 
25
 
26
+ # Establece el ID de la página a la que quieres asociar el video
27
+ video['page_id'] = page_id
 
 
 
 
 
 
 
 
 
 
 
 
28
 
29
+ # Publica el video
30
+ video.remote_create(params={
31
+ 'name': video_name,
32
+ 'description': video_description,
33
+ 'published': publish
34
+ })
35
 
36
+ print(f"Video subido exitosamente a la página con ID: {page_id}")
37
+ except Exception as e:
38
+ print(f"Error al subir video a la página: {e}")
39
+
40
+ # Ejemplo de uso
41
+ app_id = '938014541005623'
42
+ app_secret = '938014541005623'
43
+ access_token = '9e091d417ece2f1b1e1f83d47d6a0ec1'
44
+ page_id = '108592224897536'
45
+ video_path = 'reel.mp4'
46
+ video_name = 'Nombre del Video'
47
+ video_description = 'Descripción del Video'
48
+
49
+ subir_video_a_pagina(app_id, app_secret, access_token, page_id, video_path, video_name, video_description, publish=False)