def check_new_videos(self): """Check if new videos since last refresh.""" try: interval = self.blink.last_refresh - self.motion_interval * 60 except TypeError: # This is the first start, so refresh hasn't happened yet. # No need to check for motion. return False resp = api.request_videos(self.blink, time=interval, page=1) for camera in self.cameras.keys(): self.motion[camera] = False try: info = resp["media"] except (KeyError, TypeError): _LOGGER.warning("Could not check for motion. Response: %s", resp) return False for entry in info: try: name = entry["device_name"] clip = entry["media"] timestamp = entry["created_at"] if self.check_new_video_time(timestamp): self.motion[name] = True and self.arm self.last_record[name] = {"clip": clip, "time": timestamp} except KeyError: _LOGGER.debug("No new videos since last refresh.") return True
def check_new_videos(self): """Check if new videos since last refresh.""" resp = api.request_videos(self.blink, time=self.blink.last_refresh, page=0) for camera in self.cameras.keys(): self.motion[camera] = False try: info = resp['videos'] except (KeyError, TypeError): _LOGGER.warning("Could not check for motion. Response: %s", resp) return False for entry in info: try: name = entry['camera_name'] clip = entry['address'] timestamp = entry['created_at'] self.motion[name] = True self.last_record[name] = {'clip': clip, 'time': timestamp} except KeyError: _LOGGER.debug("No new videos since last refresh.") return True
def get_videos(self, start_page=0, end_page=1): """ Retrieve last recorded videos per camera. :param start_page: Page to start reading from on blink servers (defaults to 0) :param end_page: Page to stop reading from (defaults to 1) """ videos = list() all_dates = dict() for page_num in range(start_page, end_page + 1): this_page = api.request_videos(self.blink, page=page_num) if not this_page: break videos.append(this_page) _LOGGER.debug("Getting videos from page %s through %s", start_page, end_page) for page in videos: for entry in page: camera_name = entry['camera_name'] clip_addr = entry['address'] thumb_addr = entry['thumbnail'] clip_date = clip_addr.split('_')[-6:] clip_date = '_'.join(clip_date) clip_date = clip_date.split('.')[0] try: self.all_clips[camera_name][clip_date] = clip_addr except KeyError: self.all_clips[camera_name] = {clip_date: clip_addr} if camera_name not in all_dates: all_dates[camera_name] = list() all_dates[camera_name].append(clip_date) try: self.videos[camera_name].append({ 'clip': clip_addr, 'thumb': thumb_addr, }) except KeyError: self.videos[camera_name] = [{ 'clip': clip_addr, 'thumb': thumb_addr, }] self.record_dates = all_dates _LOGGER.debug("Retrieved a total of %s records", len(all_dates)) return self.videos
def download_videos(self, path, since=None, camera="all", stop=10, debug=False): """ Download all videos from server since specified time. :param path: Path to write files. /path/<cameraname>_<recorddate>.mp4 :param since: Date and time to get videos from. Ex: "2018/07/28 12:33:00" to retrieve videos since July 28th 2018 at 12:33:00 :param camera: Camera name to retrieve. Defaults to "all". Use a list for multiple cameras. :param stop: Page to stop on (~25 items per page. Default page 10). :param debug: Set to TRUE to prevent downloading of items. Instead of downloading, entries will be printed to log. """ if since is None: since_epochs = self.last_refresh else: parsed_datetime = parse(since, fuzzy=True) since_epochs = parsed_datetime.timestamp() formatted_date = get_time(time_to_convert=since_epochs) _LOGGER.info("Retrieving videos since %s", formatted_date) if not isinstance(camera, list): camera = [camera] for page in range(1, stop): response = api.request_videos(self, time=since_epochs, page=page) _LOGGER.debug("Processing page %s", page) try: result = response["media"] if not result: raise IndexError except (KeyError, IndexError): _LOGGER.info("No videos found on page %s. Exiting.", page) break self._parse_downloaded_items(result, camera, path, debug)
with open(SECRETS_FILE, "r") as secrets_file: secrets = yaml.load(secrets_file) blink = blinkpy.Blink( username=secrets["blinkUsername"], password=secrets["blinkPassword"], device_id="Doorbell Script", no_prompt=True, ) blink.start() from_time = time.time() - OFFSET_SECONDS loop_start = datetime.today() while True: videos = api.request_videos(blink, time=from_time)["media"] if len(videos) >= 1: break if datetime.today() >= (loop_start + timedelta(seconds=TIMEOUT_SECONDS)): break time.sleep(1) # Debug # with open("videos.json", "w") as f: # f.write(json.dumps(videos, indent=4)) # exit(0) if len(videos) >= 1:
def get_vids(): vid_data = blinkapi.request_videos(blink, 0, page=1).get('media') return json.dumps({"items": vid_data})