我有一个网站,允许用户链接YouTube视频.我们检查他们所有的家庭友好.但是,youtube视频创作者可以修剪视频,这意味着更改视频的开始和结束时间,更改显示的内容.这种类型的更改可以缩小视频,或者可以恢复为延长视频或两者的组合,这可能导致完全不同的视频内容集.
我们希望能够检测到这些类型的更改,并在实际显示的帧已更改时重新检查视频.我们不能简单地查看更改的持续时间,因为用户可以撤消修剪然后重新修剪到完全相同的长度,我们不会注意到.修剪也不会改变视频的发布日期.
我们正在使用youtube api,例如:
https://www.googleapis.com/youtube/v3/videos?part=snippet%2CcontentDetails%2CrecordingDetails%2Cstatus&id=[videoId]&key=[apiKey]
Run Code Online (Sandbox Code Playgroud)
这为我们提供了大量数据,包括:
Duration - this doesn't always change when a video is trimmed (undo trim, trim again)
Title
Etag - this changes all the time
Thumbnails - These don't change when you trim
PublishedAt - this doesn't change when you trim
Run Code Online (Sandbox Code Playgroud)
Etag的变化确实表明了变化,但它经常变化 - 任何时候标题改变,以及许多其他类型的变化.因此,我们会错误地提醒我们不需要适度的变更.
我们还考虑过抓取随机帧并随着时间的推移进行比较,但是没有公共API.
那么,我们如何使用API来检测视频内容是否已更改?
我在这里问,因为youtube建议在这里询问我在此问题中包含的标签:https://developers.google.com/youtube/v3/support
另请注意,如果使用现有API无法解决此问题,则表示向网站提交youtube链接的用户可以随意更改视频内容,而网站无法以合理的方式更改内容.即Youtube没有给消费者一种方法来验证给定videoId中的帧和声音不会改变.
我在目录"D:/ njs/nodetest1/imports/source1 /"的许多子目录中保存了大约一百万个JSON文件,我想将它们导入到我的mongoDB数据库中的"users"集合中.
以下代码正确遍历文件系统.如您所见,它会读取目录中的每个项目,如果该项目是目录,则会读取其中的每个项目.对于不是目录的每个项目,它在发送保存到函数的变量之前对其执行一些操作.
function traverseFS (path){
var files = fs.readdirSync(path);
for (var i in files){
var currentFile = path + '/' + files[i];
var stats = fs.statSync(currentFile);
if (stats.isFile())
runOnFile(currentFile);
else
traverseFS(currentFile);
}
}
traverseFS("D:/njs/nodetest1/imports/source1/")
Run Code Online (Sandbox Code Playgroud)
接下来,我对代码运行一些操作(见下文).这将读取文件,将其解析为JSON对象,将该对象的两个属性读入变量,在变量"entry"中创建一个对象,并将该变量传递给另一个函数.
function runOnFile(currentFile){
var fileText = fs.readFileSync(currentFile,'utf8');
var generatedJSON = JSON.parse(fileText);
var recordID = generatedJSON.recordID;
var recordText = generatedJSON.recordTexts;
var entry = {recordID:recordID, recordText:recordText};
insertRecord(entry);
}
Run Code Online (Sandbox Code Playgroud)
然后应该使用最终函数将数据插入mongoDB.我认为这是出问题的地方.
function insertRecord(entry){
var MongoClient = mongodb.MongoClient;
var MongoURL = 'mongodb://localhost:27017/my_database_name';
MongoClient.connect(MongoURL, function (err, db) {
var collection …
Run Code Online (Sandbox Code Playgroud) 奇怪的问题:当我的播放应用程序尝试在使用reactivemongo时插入/更新来自某些mongoDB集合的记录时,操作似乎失败了一个神秘的消息,但实际上,记录插入/更新了.
更多信息:
错误信息是:
play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[LastError: DatabaseException['<none>']]]
at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:280)
at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:206)
at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100)
at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:99)
at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:344)
at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:343)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
at play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:70)
at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40)
at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:248)
Caused by: reactivemongo.api.commands.LastError: DatabaseException['<none>']
Run Code Online (Sandbox Code Playgroud)
使用ReactiveMongo 0.11.14,Play 2.5.4,Scala 2.11.7,MongoDB 3.4.0.
谢谢!
更新 - 神秘感增厚!
根据@ Yaroslav_Derman的回答,我添加了一个.recover
条款,如下:
collectionRef.flatMap( c =>
c.update( BSONDocument("_id" -> publicationWithId.id.get), publicationWithId.asInstanceOf[PublicationItem], upsert=true))
.map(wr => {
Logger.warn("Write Result: " + wr )
Logger.warn("wr.inError: " + wr.inError)
Logger.warn("*************")
publicationWithId
}).recover({
case de:DatabaseException => {
Logger.warn("DatabaseException: " + …
Run Code Online (Sandbox Code Playgroud) 我想在应用程序中编写一个参数,其中我要调用的参数需要在initial_run
设置为的脚本的第一次迭代/运行中引用True
。否则,此值应保留为false。现在,此参数已在配置文件中配置。
我编写的当前代码如下。在此代码中应更改什么以返回True
值?现在,它仅返回值False
。
import sys
# main
param_1= sys.argv[0:] in (True, False)
print 'initial_run=', param_1
Run Code Online (Sandbox Code Playgroud) 我了解我们可以在iOS客户端上添加代码来检测用户是否已禁用推送通知权限,我的问题是,是否可以仅使用APN来做到这一点?
我先从Apple编程指南尝试“反馈服务”:
Apple Push Notification服务包括一项反馈服务,可为您提供有关失败的远程通知的信息。当由于预期的应用程序不存在而无法发送远程通知时,反馈服务会将该设备的令牌添加到其列表中。在传递之前过期的远程通知不被视为传递失败,并且不会影响反馈服务。通过使用此信息停止发送将无法传递的远程通知,可以减少不必要的消息开销并提高整体系统性能。
因此,“反馈服务”本质上为失败的推送通知提供了令牌列表。我尝试将推送发送到具有禁用推送通知权限或卸载了应用程序的设备,但是我的设备令牌未出现在此列表中。
苹果的文档还提到,一旦发送推送通知,我们将立即得到APN的响应:
如果您发送APN接受的通知,则不会返回任何内容。如果您发送格式不正确或无法理解的通知,则APNs将返回错误响应数据包并关闭连接。使用相同的连接在格式错误的通知之后发送的所有通知都将被丢弃,并且必须重新发送。错误响应数据包的格式如图A-2所示。
但是,无论我做什么,似乎返回的状态都保持不变:启用/禁用推送通知权限,甚至卸载应用程序...
我的假设是,即使用户禁用了推送通知,APN仍会将其视为成功交付,但iOS只是不显示它。它们中没有一个来自APN的响应代码似乎与禁用的推送通知有关。
我想知道是否可以使用APN做到这一点?谢谢!
参考:Apple Doc:https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/BinaryProviderAPI.html#//apple_ref/doc/uid/TP40008194-CH13-SW1
我想NSLinkAttributeName
在 UILabel 中自定义颜色。但设置NSForegroundColorAttributeName
不影响链接文本颜色,它仍然是蓝色。
但NSUnderlineColorAttributeName
有效,我能够自定义下划线颜色。是否可以以某种方式更改链接文本颜色?
FFmpeg使用的实际线程数与我使用-threads
参数传递的数字不对齐.
我在我的MacBook Air(有4个内核)和一个拥有2个内核的VM上运行测试.两台机器使用的线程数一致.
使用单个线程返回我期望的内容:使用1个线程.
$ ffmpeg -threads 1 -i clip.mp4 -threads 1 -acodec libfdk_aac -vcodec libx264 -b:v 200k -vf scale=200:-2 -y clip-200.mp4
$ cat /proc/$(pgrep ffmpeg)/status | grep Threads
Threads: 1
Run Code Online (Sandbox Code Playgroud)
如果我-threads
在输入上设置选项,它会增加用于3的线程数.这对我来说有点意义,因为输入将使用2个线程,输出将使用单个线程.
$ ffmpeg -threads 2 -i clip.mp4 -threads 1 -acodec libfdk_aac -vcodec libx264 -b:v 200k -vf scale=200:-2 -y clip-200.mp4
$ cat /proc/$(pgrep ffmpeg)/status | grep Threads
Threads: 3
Run Code Online (Sandbox Code Playgroud)
这是我开始感到困惑的地方.相反,我将输入保留-threads
为1并将输出设置-threads
为2,它使用8个线程(不像我期望的那样3个).
$ ffmpeg -threads 1 -i clip.mp4 -threads 2 -acodec libfdk_aac -vcodec libx264 …
Run Code Online (Sandbox Code Playgroud) 让我定义一个矩阵类如下
template<typename T, size_t rowSize, size_t colSize>
class Matrix
{
//Class implementation
};
Run Code Online (Sandbox Code Playgroud)
现在,如果我将2个矩阵定义为
Matrix<double,3,2> A;
Matrix<double,2,5> B;
A*B;
Run Code Online (Sandbox Code Playgroud)
可以进行乘法,如果我尝试它会说没有参数可以将rhs视为double,2.5为*.是否有可能将模板概括为乘以'double,x,y'和'double,y,z'并返回一个新的矩阵'double,x,y'
我想随机随机播放一个列表,以便在洗牌时列表中的每个变量都放在列表中的新位置.
我目前在做什么:
list = ['a', 'b','c', 'd'];
random.shuffle(list)
list
['c','b','d','a']
Run Code Online (Sandbox Code Playgroud)
通过这种方法,我可以对列表进行洗牌,但在这种情况下,"b"仍然可以将变量放在同一个位置.
我想要的输出
完全洗牌的清单
['c','a','d','b']
Run Code Online (Sandbox Code Playgroud)
我感谢任何帮助.我是python的新手,但如果需要任何进一步的信息,请告诉我.