def generate_long_lived_fb_token(access_token, graph_api):
"""Generate a long lived facebook token."""
params = {
'grant_type': 'fb_exchange_token',
'client_id': settings.FACEBOOK_APP_ID,
'client_secret': settings.FACEBOOK_APP_SECRET,
'fb_exchange_token': access_token
}
connection_name = 'access_token?{}'.format(urllib.parse.urlencode(params))
try:
long_lived_fb_token = graph_api.get_connections(id='oauth', connection_name=connection_name)
except facebook.GraphAPIError:
raise FacebookInvalidTokenException
return long_lived_fb_token['access_token']
python类FACEBOOK_APP_ID的实例源码
def authenticate(self, request, facebook_id):
username = '{}_{}_{}'.format(
User.USER_TYPE_FACEBOOK,
settings.FACEBOOK_APP_ID,
facebook_id,
)
try:
user = User.objects.get(
user_type=User.USER_TYPE_FACEBOOK,
username=username
)
return user
except User.DoesNotExist:
return None
def get_or_create_facebook_user(self, user_info):
username = '{}_{}_{}'.format(
self.model.USER_TYPE_FACEBOOK,
settings.FACEBOOK_APP_ID,
user_info['id']
)
user, user_created = self.get_or_create(
username=username,
user_type=self.model.USER_TYPE_FACEBOOK,
defaults={
'last_name': user_info.get('last_name', ''),
'first_name': user_info.get('first_name', ''),
'email': user_info.get('email', ''),
}
)
# ??? ?? ????? ?? ??? ???? ???
if user_created and user_info.get('picture'):
# https://scontent.xx.fbcdn.net/v/t1.0-1/p50x50/17190366_634177590104859_7473999312831140266_n.jpg?oh=4c68d08b4066747c1c7c7bcb32670b6a&oe=59DA648E
# ??? ??? URL
url_picture = user_info['picture']['data']['url']
# ?????? ????, ????? ???? ????
p = re.compile(r'.*\.([^?]+)')
file_ext = re.search(p, url_picture).group(1)
file_name = '{}.{}'.format(
user.pk,
file_ext
)
# Python tempfile
# https://docs.python.org/3/library/tempfile.html
# ?????? ????? ????
temp_file = NamedTemporaryFile()
# ??? ??? URL? ?? get?? (??? ????)
response = requests.get(url_picture)
# ?? ??? temp_file? ??
temp_file.write(response.content)
# ImageField? save()???? ???? ?? ??????? ??? ??? ??? ??
# ???? ???? ??? ?? <??pk.????????> ? ??
user.img_profile.save(file_name, temp_file)
return user
def facebook_info(request):
context = {
'facebook_app_id': settings.FACEBOOK_APP_ID
}
return context
def keys(request):
return {
'FB_APP_ID': settings.FACEBOOK_APP_ID,
'GA_TRACKING_CODE': settings.GA_TRACKING_CODE,
'JACO_API_KEY': settings.JACO_API_KEY,
}
def facebook_tab(request, *args, **kwargs):
sr = kwargs['signed_request']
fb_user_id = None
if 'user_id' not in sr:
# el usuario no esta logueado en ponline con fb
# mostrar en el template un popup con el login de fb
pass
else:
fb_user_id = sr['user_id']
if 'page' in sr:
srp = sr['page']
page_id = srp['id']
page_liked = srp['liked']
page_admin = srp['admin']
else:
page_id = request.REQUEST.get('page_id')
page_liked = request.REQUEST.get('page_liked')
page_admin = request.REQUEST.get('page_admin')
try:
fbps = FacebookPage.objects.filter(id_fb=page_id).values_list('linea_id', flat=True)
ls = Linea.objects.filter(id__in=fbps)
except:
ls = []
context = {
'fb_app_id' : settings.FACEBOOK_APP_ID,
'fb_user_id': fb_user_id,
'fb_page_id': page_id,
'fb_page_liked': page_liked,
'fb_page_admin': page_admin,
'inside_facebook': True,
'lineas': ls,
'user': request.user
}
return render_to_response(
'facebook/tab_lineas.html',
context,
context_instance=RequestContext(request)
)
def facebook_app_id(request):
return {'FACEBOOK_APP_ID': settings.FACEBOOK_APP_ID}
def aprobar(self, user):
r = self.recorrido
if not r.uuid:
# todavia no existe una version de este recorrido real, que estoy por retirar
# antes de retirarlo creo su version correspondiente
rp = RecorridoProposed(
recorrido = r,
nombre = r.nombre,
linea = r.linea,
ruta = r.ruta,
sentido = r.sentido,
slug = r.slug,
inicio = r.inicio,
fin = r.fin,
semirrapido = r.semirrapido,
color_polilinea = r.color_polilinea,
pois = r.pois,
descripcion = r.descripcion
)
rp.save(user=user)
self.parent=rp.uuid
self.save()
r.recorrido = self.recorrido
r.nombre = self.nombre
r.linea = self.linea
r.ruta = self.ruta
r.sentido = self.sentido
r.inicio = self.inicio
r.fin = self.fin
r.semirrapido = self.semirrapido
r.color_polilinea = self.color_polilinea
r.pois = self.pois
r.descripcion = self.descripcion
r.save()
try:
parent = RecorridoProposed.objects.get(uuid=self.parent)
if parent:
parent.logmoderacion_set.create(created_by=user,newStatus='R')
except RecorridoProposed.DoesNotExist:
pass
for rp in RecorridoProposed.objects.filter(current_status='S', recorrido=r.recorrido).exclude(uuid=self.uuid):
rp.logmoderacion_set.create(created_by=user, newStatus='R')
self.logmoderacion_set.create(created_by=user, newStatus='S')
#call_command('crear_thumbs', recorrido_id=self.recorrido.id)
# Notificacion por facebook
token = urllib2.urlopen('https://graph.facebook.com/oauth/access_token?client_id='+settings.FACEBOOK_APP_ID+'&client_secret='+settings.FACEBOOK_API_SECRET+'&grant_type=client_credentials').read().split('access_token=')[1]
user = self.get_moderacion_last_user()
if not user.is_anonymous():
fb = user.social_auth.filter(provider='facebook')
if len(fb) != 0:
from facebook import GraphAPI
fb_uid = fb[0].uid
graph = GraphAPI(token)
graph.request("/"+fb_uid+"/notifications/", post_args={"template":'Felicitaciones! Un moderador aceptó tu edición en cualbondi', "href":"https://cualbondi.com.ar/revision/" + str(self.id) + "/"})