def saveMedias(user, medias): ''' create by bigzhu at 15/09/04 20:58:54 保存meedias "attribution":null, "tags":[ ], "type":"image", "location":{ }, "comments":{ }, "filter":"Normal", "created_time":"1441362020", "link":"https:\/\/instagram.com\/p\/7NIHiLJJs3\/", "likes":{ }, "images":{ }, "users_in_photo":[ ], "caption":{ }, "user_has_liked":false, "id":"1066544388859271991_262341", "user":{ } ''' for media_d in medias['data']: media = storage(media_d) db_media = storage() #db_media.attribution = media.attribution #db_media.tags = json.dumps(media.tags, cls=public_bz.ExtEncoder) db_media.type = media.type #db_media.location = json.dumps(media.location, cls=public_bz.ExtEncoder) db_media.comments = json.dumps(media.comments, cls=public_bz.ExtEncoder) db_media.filter = media.filter #db_media.created_time = time_bz.timestampToDateTime(media.created_time) + timedelta(hours=8) db_media.created_time = time_bz.timestampToDateTime(media.created_time) db_media.link = media.link #db_media.likes = json.dumps(media.likes, cls=public_bz.ExtEncoder) db_media.low_resolution = json.dumps(media.images['low_resolution']) db_media.standard_resolution = json.dumps(media.images['standard_resolution']) db_media.thumbnail = json.dumps(media.images['thumbnail']) #db_media.users_in_photo = json.dumps(media.users_in_photo, cls=public_bz.ExtEncoder) if media.caption: caption = media.caption caption['user_id'] = caption['from']['id'] del caption['from'] else: caption = '' db_media.caption = json.dumps(caption, cls=public_bz.ExtEncoder) db_media.id_str = media.id db_media.user_id = user.id id = pg.insertIfNotExist(pg, 'instagram_media', db_media, "id_str='%s'" % db_media.id_str) if id is None: raise Exception('重复记录 id=%s, name=%s' % (media.id, user.username)) else: print 'new=', media.id, user.username if id is not None and len(medias) <= 2: # 新增加消息,微信通知只通知2条以内 openids = public_db.getOpenidsByName('instagram', user.username) for data in openids: if caption != '': text = caption.get('text') else: text = '' wechat_oper.sendInstagram(data.openid, text, media.images['low_resolution']['url'], user.username, id) if medias['pagination']: next_url = medias['pagination']['next_url'] medias = callGetMeidaApi(next_url=next_url) saveMedias(user, medias)
def getMedia(user_name=None, with_next_url=None, user=None): if user_name: user = getUser(user_name) if user is None: return # min_id 会查出大于等于这个id的 try: medias, next_ = api.user_recent_media(user_id=user.id, min_id=user.last_id) except instagram.bind.InstagramClientError: print public_bz.getExpInfoAll() public_db.delNoName('instagram', user_name) return if medias: last_id = medias[0].id pg.update('instagram_user', where="lower(username)=lower('%s')" % user_name, last_id=last_id) else: medias, next_ = api.user_recent_media(with_next_url=with_next_url) for media in medias: db_media = storage() if media.caption: caption = media.caption.__dict__ caption['user_id'] = caption['user'].id del caption['user'] else: caption = '' db_media.caption = json.dumps(caption, cls=public_bz.ExtEncoder) db_media.comment_count = media.comment_count if media.comments: media.comments = [d.__dict__ for d in media.comments] for comment in media.comments: comment['user'] = comment['user'].__dict__ db_media.comments = json.dumps(media.comments, cls=public_bz.ExtEncoder) db_media.created_time = media.created_time # 8小时的问题 db_media.created_time += timedelta(hours=8) db_media.filter = media.filter db_media.low_resolution = json.dumps(media.images['low_resolution'].__dict__) db_media.standard_resolution = json.dumps(media.images['standard_resolution'].__dict__) db_media.thumbnail = json.dumps(media.images['thumbnail'].__dict__) db_media.id_str = media.id db_media.like_count = media.like_count # likes里有User对象,暂时不存了 #db_media.likes = json.dumps(media.likes) db_media.link = media.link db_media.type = media.type db_media.user_id = user.id id = db_bz.insertIfNotExist(pg, 'instagram_media', db_media, "id_str='%s'" % db_media.id_str) print 'new=', media.id, user.username if id is not None and len(medias) <= 2: # 新增加消息,微信通知只通知2条以内 openids = public_db.getOpenidsByName('instagram', user.username) for data in openids: if caption != '': text = caption.get('text') else: text = '' wechat_oper.sendInstagram(data.openid, text, media.images['standard_resolution'].url, user.username, id) # 递归查出 if next_ != with_next_url: getMedia(with_next_url=next_, user=user)