我查看了论坛上的回答,但仍然无法使其正常工作。该函数似乎不接受我在查询中定义的 user_param 参数。
错误信息: Array ( [success] => [errors] => Array ( [0] => DataExplorer::ValidationError: 缺少类型为 int 的参数 user_param ) )
查询内容:
-- [params]
-- int :user_param
SELECT Count(likes_received) total_likes_received
from user_stats us
where us.user_id = :user_param
代码:
<?php global $post;
$current_user_id = get_current_user_id();
$user_discourse_id = (int)get_user_meta($current_user_id,'discourse_sso_user_id')[0];
// api 凭据
$api_key = 'key';
$api_username = 'name';
$post_fields = array(
'user_param' => $user_discourse_id,
);
$headers = array("Content-Type: multipart/form-data;","Api-Key: $api_key","Api-Username: $api_username",);
$url = 'https://domain/admin/plugins/explorer/queries/9/run';
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $post_fields );
$result = curl_exec( $ch );
if ( curl_errno( $ch ) !== 0 ) {
// 处理错误,调用 curl_close( $ch ) 并返回。
echo 'error';
curl_close ($ch);
return;
}
curl_close( $ch );
$decoded_result = json_decode( $result, true );
print_r($decoded_result);
?>
我曾尝试使用和不使用 http_build_query 来生成 $post_fields 的值,但参数仍未传递给数据探索器。
一个月前使用 http_build_query 时还能正常工作,现在却不行了。我漏掉了什么?
更新:
我甚至尝试手动传递数组,但错误依旧。该插件最近是否有变更?
curl_setopt( $ch, CURLOPT_POSTFIELDS, array('user_param'=>'25'));
curl_setopt( $ch, CURLOPT_POSTFIELDS, array('user_param' => 25));
simon
2
请查看 如何使用 Discourse API 运行 Data Explorer 查询,了解如何正确设置 params 参数。根据您提供的代码,您似乎试图直接传递 user_param 参数,而不是将其包含在 params 参数中。我刚才链接的主题中的第一个代码示例应该能让您了解如何设置该参数。
Simon,
我看了你关于 API 的文章,但我正在使用 curl_setopt() 函数来插入参数。该函数要求我使用数组。所以我尝试了以下代码,但显示了一个论坛级别的错误。
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch, CURLOPT_POSTFIELDS, array('params' => (array('user_param' => 25))));
$result = curl_exec( $ch );
print_r($result);
看起来数据现在正在传递,但输出没有被渲染。
哎呀
驱动此讨论论坛的软件遇到了意外问题。对于造成的不便,我们深表歉意。
有关该错误的详细信息已被记录,并生成了自动通知。我们将对此进行检查。
无需进一步操作。但是,如果错误条件持续存在,您可以通过在网站的反馈类别中发布讨论主题,提供额外细节,包括复现错误的步骤。
我漏掉了什么?
simon
4
你可以尝试先在计算机终端中使用 curl 请求来调用 API,这样或许能简化问题的调试过程。如果终端中的请求能够成功执行,那就说明问题出在你使用 curl_setopt 创建请求的方式上。
通过 API 执行 Data Explorer 查询不应导致你网站服务器返回 500 错误。如果你能够访问该网站,可以在网站错误日志(位于 管理面板 / 日志 / 错误日志)中查找具体出错原因的详细信息。
我找到了相关信息,但无法理解其含义。
MultiJson::ParseError (unexpected character (after ) at line 1, column 1 [parse.c:769])
app/controllers/application_controller.rb:395:in `block in with_resolved_locale'
app/controllers/application_controller.rb:395:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:355:in `call'
config/initializers/008-rack-cors.rb:25:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:177:in `call'
关于你的第一个建议,我正在研究如何在命令提示符下运行 Curl。
所以我在终端上尝试了该代码,但收到了以下错误:
curl: (3) URL 格式错误或非法,或缺少 URL
curl: (3) URL 格式错误或非法,或缺少 URL
curl: (3) URL 格式错误或非法,或缺少 URL
curl: (3) URL 格式错误或非法,或缺少 URL
root@Discourse-for-Prowess:~# curl -X POST “https://domain/admin/plugins/explorer/queries/9/run”-H “Content-Type:multipart/form-data;”-H “Api-key:12345”-H “Api-username:username”-F ‘params={“user_param”:“25”}’
我可以在数据浏览器中运行该查询 - 截图。
在错误日志中,我看到以下内容:
ActionDispatch::Http::MimeNegotiation::InvalidType ("%{#context['com.opensymphony.xwork2.dispatcher.httpservletresponse'].addheader('90b3sfq9'" 不是有效的 MIME 类型)
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:353:in `call'
config/initializers/008-rack-cors.rb:25:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:177:in `call'
任何建议都将不胜感激。