post_id = $data['post_id']; $log->account_id = $data['account_id']; $log->account_name = $data['account_name']; $log->status = $data['status']; $log->remark = $data['remark']; $log->created_at = $data['created_at']; $log->updated_at = $data['updated_at']; $log->dist_id = $data['dist_id']; $log->media_name = $data['media_name']; $log->response_ids = $data['response_ids']; $log->send_time = $data['send_time']; $log->save(); } /* * 找状态为0并且发送时间小于当前时间的日志 */ public static function getSendLog($limit = 5) { $log = new Model(); $logs = $log->where('status', 0)->where('send_time', '<', Carbon::now())->limit($limit)->get(); return $logs; } /* * 计算Twitter月配额,每月只能发送100个帖子,(只限发送帖子,其他接口,每个用户1个请求,15分钟内只允许发送一次) * */ public static function getPostQuota($mediaName = 'Twitter') { $log = new Model(); if ($mediaName === 'Twitter') { // 获取当月第一天 00:00:00 的时间戳 $startOfMonth = Carbon::now()->startOfMonth(); $count = $log->where('media_name', 'Twitter') ->where('created_at', '>=', $startOfMonth->format('Y-m-d H:i:s')) ->count(); return 100 - $count; } elseif ($mediaName === 'YouTube') { // 获取当天 00:00:00 的时间戳 $startOfDay = Carbon::now()->startOfDay(); $count = $log->where('media_name', 'YouTube') ->where('created_at', '>=', $startOfDay->format('Y-m-d H:i:s')) ->count(); // 计算可用配额(向下取整) $quota = floor((10000 - 1600 * $count) / 1600); return max($quota, 0); // 保证最小返回0 } else { return 999; } } /* * 返回Twitter可以发送的时间 */ public static function getTwitterSendTime($sendTime) { // 将字符串转换为Carbon实例 $sendTimeCarbon = Carbon::parse($sendTime); $log = new Model(); $query = $log->where('status', 0) ->whereBetween('send_time', [ $sendTimeCarbon->copy()->subMinutes(15), $sendTimeCarbon ]) ->orderByDesc('send_time') ->first(); if ($query) { // 返回格式化的时间字符串(与原输入格式保持一致) $query_send_time = Carbon::parse($query->send_time); return $query_send_time ->addMinutes(15) ->toDateTimeString(); } // 没有记录时返回原始字符串 return $sendTime; } /* * 判断是否可以发送 * */ public static function twitterCanSend() { $log = new Model(); //查找最后一条发送记录 $lastSendLog = $log->where('status', 1)->where('media_name', 'Twitter')->orderByDesc('send_time')->first(); //如果时间间隔小于15分钟,则不允许发送 if ($lastSendLog) { $lastSendTime = Carbon::parse($lastSendLog->send_time); $nowTime = Carbon::now(); $diffTime = $nowTime->diffInMinutes($lastSendTime); if ($diffTime <= 15) { return false; } } return true; } }