def put_fb_page(fb_user_obj, brand_name, page_obj): url = "%s" % (page_obj["id"]) page_data = GraphAPI(page_obj["access_token"]).request(url) fb_page = FBPage() fb_page.page_id = page_data["id"] fb_page.name = page_data["name"] page_data.pop("id", None) page_data.pop("name", None) fb_page.fields = page_data def save_obj(page): return FBPage.collection().save(page.serialize()) dupe_obj = FBPage.collection().find_one({"page_id": page_obj["id"]}) if dupe_obj is None: fb_page._id = save_obj(fb_page) else: FBPage.collection().update({"page_id": page_obj["id"]}, fb_page.serialize()) fb_page = FBPage.unserialize(FBPage.collection().find_one({"page_id": page_obj["id"]})) update_brand_mapping(fb_user_obj.u_id, brand_name, "facebook", page_obj["id"], page_obj["access_token"]) t = Thread(target=load_fb_page_to_db, args=(page_obj["id"], page_obj["access_token"])) t.setDaemon(False) t.start() return fb_page
def update_page_attr( page_id, access_token, profile_photo=None, cover_photo=None, about=None, description=None, website=None, phone=None, hours=None, ): url = page_id api = GraphAPI(access_token) dict = {} if about is not None: dict["about"] = about if description is not None: dict["description"] = description if website is not None: dict["website"] = website if phone is not None: dict["phone"] = phone if hours is not None: pass data = api.request(url, post_args=dict)
def update_fb_event(event_id, page, state, title, description, start_time, end_time): datetime_now = datetime.datetime.utcnow().isoformat("T") event = FBEvent.collection().find_one({"event_id": event_id}) event["fields"]["name"] = title event["fields"]["description"] = description event["updated_time"] = datetime_now if start_time is not None: event["fields"]["start_time"] = isoformat(start_time) if end_time is not None: event["fields"]["end_time"] = isoformat(end_time) if state == CampaignState.PUBLISHED: api = GraphAPI(page["access_token"]) url = event_id dict = { "name": title, "start_time": isoformat(start_time) + "Z", "description": strip_tags(replace_newline(description)), } if end_time is not None: dict["end_time"] = isoformat(end_time) + "Z" api.request(url, post_args=dict) event_data = api.request(event_id) event = save_fb_event(event_data, page["id"]) else: FBEvent.collection().update({"event_id": event_id}, {"$set": {event}}) event = FBEvent.unserialize(FBEvent.collection().find_one({"event_id": event_id})) return event
def put_fb_event(page, fb_id, state, title, description, start_time, end_time, media_file=None): datetime_now = datetime.datetime.utcnow().isoformat("T") event = FBEvent() event.page_id = page["id"] event.owner = {"id": fb_id} event.fields = {"name": title, "description": description} event.created_time = datetime_now event.updated_time = datetime_now if start_time is not None: event.fields["start_time"] = isoformat(start_time) if end_time is not None: event.fields["end_time"] = isoformat(end_time) if state == CampaignState.PUBLISHED: api = GraphAPI(page["access_token"]) url = "%s/%s" % (page["id"], "events") # todo : note the start and end UTC time formats, currently hard-coded +0000 dict = { "name": title, "start_time": isoformat(start_time) + "Z", "description": strip_tags(replace_newline(description)), } if end_time is not None: dict["end_time"] = isoformat(end_time) + "Z" if media_file: dict["source"] = media_file dict["access_token"] = page["access_token"] event.event_id = api.put_event(dict)["id"] else: event.event_id = api.request(url, post_args=dict)["id"] event_data = api.request(event.event_id) print "event data" print event_data event = save_fb_event(event_data, page["id"]) else: event._id = FBEvent.collection().insert(event.serialize()) return event
def put_fb_post(page, fb_id, state, message, media_file=None): datetime_now = datetime.datetime.utcnow().isoformat("T") post = FBPost() post.page_id = page["id"] post.owner = {"id": fb_id} post.fields = {"message": message} post.created_time = datetime_now post.updated_time = datetime_now if state == CampaignState.PUBLISHED: api = GraphAPI(page["access_token"]) if media_file is None: post.post_id = api.put_wall_post(message, profile_id=page["id"])["id"] else: data = api.put_photo(media_file, message=message) post.post_id = data["id"] url = "%s" % post.post_id post_data = api.request(url) post = save_fb_post(post_data, page["id"]) else: post._id = FBPost.collection().insert(post.serialize()) return post