def put_fsq_venue(user_id, brand_name, venue_id): url = "%s/%s" % ("venues", venue_id) brand_obj = get_brand_mapping(user_id, brand_name) api = FoursquareAPI(brand_obj.foursquare["access_token"]) data = api.request(url) v = data["response"] venue = FSQVenue() venue.venue_id = v["venue"]["id"] venue.name = v["venue"]["name"] venue.fields = v dupe_obj = FSQVenue.collection().find_one({"venue_id": v["venue"]["id"]}) if dupe_obj is None: FSQVenue.collection().insert(venue.serialize()) else: FSQVenue.collection().update({"venue_id": v["venue"]["id"]}, venue.serialize()) venue = FSQVenue.unserialize(FSQVenue.collection().find_one({"venue_id": v["venue"]["id"]})) BrandMapping.collection().update({"uid": user_id, "brand_name": brand_name}, {"$push": {"foursquare.venues": v["venue"]["id"]}}) t = Thread(target=load_fsq_tips_to_db, args=(v["venue"]["id"], brand_obj.foursquare["access_token"])) t.setDaemon(False) t.start() return venue
def test_put_campaign_data(self): user_id = "xaa8LzkwtCCgb6BeP" brand_id = "516bb6f3c64ed2c1ad73842a" platforms = ["campaign", "facebook"] title = "test_title" description = "test_description" type = "promotional" is_published = True is_draft = False item_list = [] kvp = {} if PLATFORM_CAMPAIGN in platforms: c = Campaign() c.uid = user_id c.title = title c.description = description c.type = type c._id = save(c) c.item_id_lis = item_list kvp["campaign_list"] = c._id if PLATFORM_FACEBOOK in platforms: fb_post = put_fb_post(get_brand_mapping(user_id, brand_id).facebook, title) kvp["facebook_list"] = fb_post._id publish_datetime = datetime.datetime.now() if is_published is True else None put_mapping(user_id, kvp, publish_datetime, is_published, is_draft)
def get_fsq_venues_managed(user_id, brand_name): url = "venues/managed" brand_obj = get_brand_mapping(user_id, brand_name) api = FoursquareAPI(brand_obj.foursquare["access_token"]) data = api.request(url) return data["response"]["venues"]["items"]
def del_campaign(): """ (DELETE: /campaign) """ from campaigns.campaign.model import Campaign from unifide_backend.action.social.facebook.model import FBPost, FBEvent from unifide_backend.action.social.twitter.model import TWTweet from unifide_backend.action.social.foursquare.model import FSQPageUpdate from unifide_backend.action.mapping.action import del_mapping, get_brand_mapping, get_mapping from unifide_backend.action.social.facebook.action import del_fb_post, del_fb_event from unifide_backend.action.social.twitter.action import del_tweet from unifide_backend.action.social.foursquare.action import del_fsq_update user_id = request.args.get("user_id") brand_name = request.args.get("brand_name") campaigns = request.args.get("campaign_list") brand_obj = get_brand_mapping(user_id, brand_name) campaign_list = campaigns.split(',') for c in campaign_list: mapping_obj = get_mapping(c) # delete facebook post / event if mapping_obj.facebook is not None: id = mapping_obj.facebook post = FBPost.collection().find_one({"_id": coerce_bson_id(id)}) try: if post is not None: del_fb_post(post["post_id"], id, brand_obj.facebook["access_token"]) event = FBEvent.collection().find_one({"_id": coerce_bson_id(id)}) if event is not None: del_fb_event(event["event_id"], id, brand_obj.facebook["access_token"]) except Exception, err: print traceback.format_exc() print id # delete twitter status if mapping_obj.twitter is not None: id = mapping_obj.twitter tweet = TWTweet.collection().find_one({"_id": coerce_bson_id(id)}) try: del_tweet(tweet["fields"]["id_str"] if tweet["fields"] is not None else None, id, brand_obj.twitter["access_token"]["key"], brand_obj.twitter["access_token"]["secret"]) except Exception, err: print traceback.format_exc() print id
def update_campaign_data(): """ (PUT: /campaign/date/update) """ from campaigns.campaign.model import Campaign from unifide_backend.action.mapping.action import get_brand_mapping, get_mapping from unifide_backend.action.social.facebook.model import FBEvent from unifide_backend.action.social.facebook.action import update_fb_event user_id = request.form.get("user_id") brand_name = request.form.get("brand_name") campaign_id = request.form.get('campaign_id') title = request.form.get('title') description = request.form.get('description') event_datetime_start = float(request.form.get("datetime_start")) if request.form.get("datetime_start") is not None else None event_datetime_end = float(request.form.get("datetime_end")) if request.form.get("datetime_end") is not None else None place = request.form.get("place") item_list = request.form.get("item_list") print title, description print campaign_id brand_obj = get_brand_mapping(user_id, brand_name) mapping_obj = get_mapping(campaign_id) print brand_obj print mapping_obj set_dic = { "title": title, "description": description, "happening_datetime_start": event_datetime_start, "happening_datetime_end": event_datetime_end, } if item_list is not None and len(item_list) > 0: set_dic["item_id_lis"] = item_list if mapping_obj.campaign is not None: Campaign.collection().update({"_id": mapping_obj.campaign}, {"$set" : set_dic}) if mapping_obj.blog is not None: Campaign.collection().update({"_id": mapping_obj.blog}, {"$set" : set_dic}) if mapping_obj.facebook is not None and mapping_obj.type == "event": event = FBEvent.collection().find_one({"_id": coerce_bson_id(mapping_obj.facebook)}) update_fb_event(event["event_id"], brand_obj.facebook, mapping_obj.state, title, description, event_datetime_start, event_datetime_end) return jsonify({"status": "ok"})
def put_campaign_data(): """ (PUT: campaign/data) """ from campaigns.campaign.model import Campaign, CampaignType from campaigns.campaign.action import save from unifide_backend.action.mapping.model import CampaignState from unifide_backend.action.mapping.action import put_mapping, get_brand_mapping from unifide_backend.action.social.facebook.action import put_fb_post, get_fb_user, put_fb_event from unifide_backend.action.social.twitter.action import put_tweet, get_tw_user from unifide_backend.action.social.foursquare.action import put_fsq_update from base.media.action import _store_locally, url_for, save_media from base.media.model import Media from base.items.action import save as save_item from base import items from base.items.model import Item from unifide_backend.action.util import url_generator from cfg import DOMAIN_PATH print "starting" user_id = request.form.get("user_id") brand_name = request.form.get("brand_name") platforms = request.form.getlist("platforms") type = request.form.get("type") title = request.form.get("title") description = request.form.get("description") event_datetime_start = float(request.form.get("datetime_start")) if request.form.get("datetime_start") is not None else None event_datetime_end = float(request.form.get("datetime_end")) if request.form.get("datetime_end") is not None else None item_file_id = request.form.get("media_file_url", None) state = request.form.get("state") scheduled_datetime = float(request.form.get("scheduled_datetime")) if state == CampaignState.SCHEDULED else None redirect_url = request.form.get("redirect_to", None) brand_obj = get_brand_mapping(user_id, brand_name) parsed_title = title parsed_description = description image_io = None file_path = None media_obj = None # load media object from item ID if item_file_id: dic = Item.collection().find_one({"_id": coerce_bson_id(item_file_id)}) item_obj = Item.unserialize(dic) if dic is not None else None if item_obj: media_obj = Media.unserialize(Media.collection().find_one({"_id": item_obj.media_id})) # load user uploaded image files = ["media_file"] for f in files: media_file = request.files.get(f) if media_file.filename != "": if request.files.get("media_file").mimetype in ["image/png", "image/gif", "image/jpeg", "image/jpg"]: file_path = _store_locally(media_file.filename, media_file) media_obj = save_media(media_file) # open file stream to user uploaded image if file_path: image = Image.open(file_path) image_io = StringIO() image.save(image_io, 'jpeg', quality=95) image_io.seek(0) # open file stream to item image if media_obj: if media_obj.storage == MediaStorage.LOCAL: img_file_path = os.path.join(UPLOAD_FOLDER, media_obj.file_name) image = Image.open(img_file_path) else: req = requests.open(url_for(media_obj)) image = Image.open(StringIO(req.content)) image_io = StringIO() image.save(image_io, 'jpeg', quality=95) image_io.seek(0) kvp = {} if PLATFORM_CAMPAIGN in platforms: c = Campaign() c.uid = user_id c.title = title c.description = description c.type = type if item_file_id is not None: c.item_id_lis.append(item_file_id) #event component c.happening_datetime_start = event_datetime_start if event_datetime_start is not None else None c.happening_datetime_end = event_datetime_end if event_datetime_end is not None else None c._id = save(c) kvp["campaign"] = c._id print "done campaign" if PLATFORM_BLOG in platforms: blog = Item() blog.name = title blog.description = description blog.media_id = media_obj._id if media_obj is not None else None blog_path_list = ["Pages", "Blog"] blog_container = items.container_from_path(blog_path_list) blog.container_id = blog_container._id blog._id = save_item(blog) kvp["blog"] = blog._id print "done blog" # add a link to web/blog campaign for social network campaigns if PLATFORM_CAMPAIGN in platforms or PLATFORM_BLOG in platforms: parsed_title += "\n" + url_generator(DOMAIN_PATH, title) parsed_description += "\n\n" + url_generator(DOMAIN_PATH, title) if PLATFORM_FACEBOOK in platforms: fb_user = get_fb_user(user_id, brand_name) if type == CampaignType.PROMOTION: post = put_fb_post(brand_obj.facebook, fb_user.fb_id, state, parsed_title, image_io) kvp[PLATFORM_FACEBOOK] = post._id elif type == CampaignType.EVENT: event = put_fb_event(brand_obj.facebook, fb_user.fb_id, state, title, parsed_description, event_datetime_start, event_datetime_end, image_io) kvp[PLATFORM_FACEBOOK] = event._id print "done facebook" if PLATFORM_TWITTER in platforms: tw_user = get_tw_user(user_id, brand_name)[0] tweet = put_tweet(parsed_title, tw_user.tw_id, brand_obj.twitter["access_token"]["key"], brand_obj.twitter["access_token"]["secret"], state, url_for(media_obj) if media_obj is not None else file_path) kvp[PLATFORM_TWITTER] = tweet._id print "done twitter" if PLATFORM_FOURSQUARE in platforms: page_update = put_fsq_update(parsed_title, brand_obj.foursquare["venues"][0], brand_obj.foursquare["access_token"], state) kvp[PLATFORM_FOURSQUARE] = page_update._id print "done foursquare" if PLATFORM_PUSH in platforms: kvp[PLATFORM_PUSH] = 1 #todo : waiting for push implementation pass publish_datetime = datetime.datetime.now() if state == CampaignState.PUBLISHED else datetime.datetime.fromtimestamp(scheduled_datetime) put_mapping(user_id, brand_name, kvp, publish_datetime, type, state) if redirect_url is not None: return render_template("redirect.html", **{ "redirect_url": redirect_url }) return jsonify({"status": "ok"})
def put_business_info(): """ (PUT: business/info) """ from unifide_backend.action.mapping.action import get_brand_mapping from unifide_backend.action.social.facebook.action import update_page_attr as facebook from unifide_backend.action.social.twitter.action import update_profile as twitter from unifide_backend.action.social.foursquare.action import update_venue as foursquare user_id = request.form.get("user_id") brand_name = request.form.get("brand_name") desc = request.form.get("description") info = request.form.get("info") name = request.form.get("name") email = request.form.get("email") website = request.form.get("website") phone = request.form.get("phone") address = request.form.get("address") redirect_url = request.form.get("redirect_to") brand_obj = get_brand_mapping(user_id, brand_name) #update it org_info_obj = org.get() if name is not None: org_info_obj.name = name if desc is not None: org_info_obj.description = desc if info is not None: org_info_obj.info = info if email is not None: org_info_obj.email = email if website is not None: org_info_obj.website = website if phone is not None: org_info_obj.phone = phone if address is not None: org_info_obj.address = address org.save(org_info_obj) #todo: handle errors for each API error #update social if brand_obj.facebook is not None: facebook(brand_obj.facebook["id"], brand_obj.facebook["access_token"], about=org_info_obj.info, description=org_info_obj.description, website=org_info_obj.website, phone=org_info_obj.phone) if brand_obj.twitter is not None: twitter(brand_obj.twitter["access_token"]["key"], brand_obj.twitter["access_token"]["secret"], org_info_obj.name, org_info_obj.website, org_info_obj.address, org_info_obj.info) if brand_obj.foursquare is not None: foursquare(brand_obj.foursquare["venues"][0], brand_obj.foursquare["access_token"], org_info_obj.name, org_info_obj.address, org_info_obj.phone, org_info_obj.description) if redirect_url is not None: return render_template("redirect.html", **{ "redirect_url": redirect_url }) return jsonify({ "status": "ok" })