Nano Hash - криптовалюты, майнинг, программирование

Код ошибки API городского дирижабля 40700

Я работаю с API Urban Airship (v3), чтобы сообщения на Android/iPhone/Blackberry и, надеюсь, скоро на телефоны с Windows. Я не несу за это ответственности; вместо этого я настраиваю серверную часть, чтобы пользователи могли отправлять широковещательные сообщения.

Другой парень создал оригинальный бэкэнд, но я решил перестроить его снизу вверх, чтобы добавить некоторые дополнительные функции. В нем работает все, кроме всего проталкивания трансляционной части. Ну, вроде работает; позволь мне объяснить:

Когда форма отправляется, данные поступают в базу данных через MYSQL, а затем с помощью mysql_fetch_id() я получаю новый идентификатор и подбрасываю этот идентификатор в функцию PHP с именем sentBroadcast. Это выглядит следующим образом:

function sentBroadcast($id){

$alertinfo = getAlertInfo($id);//this just gets all the data matching the id
$alert = mysql_fetch_assoc($alertinfo);     

    //these just get extra values   
$organization = getOrganizationById($alert['broadcast_organization_id']);
$cityinfo =  getCityInfo($organization['organization_city_id']);
$city = mysql_fetch_assoc($cityinfo);

// Create Airship object
$airship = new Airship(APP_KEY, APP_MASTER_SECRET);

$apiurl = "https://go.urbanairship.com/api/location/?q=".str_replace(" ","",strtolower($city['city_name']));

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $apiurl); 
curl_setopt($ch, CURLOPT_USERPWD, APP_KEY.":".APP_MASTER_SECRET);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close ($ch);

$json = json_decode($output);

$locationid = "all";

if(count($json->features) > 0){
    $locationid = $json->features[0]->id;
}


//send the message

$broadcasttype = "";
if($alert['broadcast_broadcasttypeother'] != ""){
    $broadcasttype = $alert['broadcast_broadcasttypeother'];
}
else {
            //this just gets data, nothing to see here
    $broadcasttype = getCategoryInfo($alert['broadcast_broadcasttype_id'],'broadcasttype_name');
}

$message = html_entity_decode($broadcasttype)."\r\n".html_entity_decode($organization['organization_name'])."\r\n". html_entity_decode($alert['broadcast_subject']);
$blackberry_message = html_entity_decode($organization['organization_name'])."\r\n". html_entity_decode($alert['broadcast_subject']);


//calc as UTC
$timestamp = strtotime($alert['broadcast_sentdatetime']) + strtotime("+1 minute"); //add an hour
$offset = new DateTime(date("Y-m-d H:i:s T",$timestamp)); 
$offset->setTimezone(new DateTimeZone('UTC'));

$minutes_to_add = 10;

$time = new DateTime($alert['broadcast_sentdatetime']);
$time->add(new DateInterval('PT' . $minutes_to_add . 'S'));

$stamp = $time->format('Y-m-d H:i:s');

//echo $stamp;

$broadcast_message = array( 
                            'schedule' => array("scheduled_time" => $stamp), 
                            'push' => array("audience" => "all",
                                             "notification" => array("alert"    => $message), 
                                             "device_types" => array()
                                            ),
                            );
$device_types = array();
$device_types[] = "ios";
$device_types[] = "android";
$device_types[] = "blackberry";
$broadcast_message["push"]["device_types"] = $device_types;

if(in_array("ios", $device_types)){
    $broadcast_message["push"]["notification"]["ios"] = array("sound" => "police.mp3", "extra" => array("id"=>$alert['broadcast_id']), "badge"  => "+1");
}
if(in_array("android", $device_types)){
    $broadcast_message["push"]["notification"]["android"] = array("extra"=>array("id"=>$alert['broadcast_id']));
}
if(in_array("blackberry", $device_types)){
    $broadcast_message["push"]["notification"]["blackberry"] = array("content-type"=>"text/plain","body"=> json_encode(array("id"=>$alert['broadcast_id'], "body"=>$blackberry_message, "type"=>$broadcasttype)));
}


$data_string = json_encode($broadcast_message);

$apiurl = "https://go.urbanairship.com/api/schedules/";
$ch = curl_init(); 


curl_setopt($ch, CURLOPT_URL, $apiurl); 
curl_setopt($ch, CURLOPT_USERPWD, APP_KEY.":".APP_MASTER_SECRET);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                                            'Content-type: application/json',
                                            'Accept: application/vnd.urbanairship+json; version=3;',
                                            'Content-Length: ' . strlen($data_string)
                                            ));

$json = curl_exec($ch);
$output = json_decode($json, true);

if(!is_array($output) || empty($output["ok"])){
  echo "<h1>ERROR: (".(isset($output["error"]) ? $output["error"] : "An unknown error has occurred while trying to send your message.").")</h1>";
  echo $data_string;
  print_r($output);
  $error = true;
}


curl_close ($ch);

$debug = false;
if($debug || $error){
  if($error) echo "<!--";
    var_dump($broadcast_message);
    echo "<hr><br>";
    echo $json."<hr><br>";
    echo "<pre>";
    print_r($output);
    echo "</pre>";

    if(!empty($output['ok'])){
      //maybe we should save the status, or the json in the db.
      echo 'yay it sent';
    }
  if($error) echo "-->";
}
        if($error){
          exit;
        }
}//end sendBroadcast

Когда я делаю этот запрос, я получаю сообщение об ошибке «Не удалось разобрать тело запроса тела». Это было не очень полезно, поэтому я напечатал ответ (смотрите в разделе «if(!is_array($output) || empty($output[«ok»])){»). Я получаю следующее сообщение об ошибке:

Array ( [ok] => [error] => Could not parse request body. [error_code] => 40700 [details] => Array ( [error] => Cannot schedule for the past 2013-10-12T06:46:00.000Z ) [operation_id] => 6fde4fa0-4b64-11e3-8903-90e2ba0253a0 )

Я получаю сообщение об ошибке «Невозможно запланировать на прошлое», однако на момент отправки это было будущее. Я начал проводить некоторые исследования и прочитал, что мне нужно установить время UTC. При этом, каким бы ни было мое время сейчас, оно всегда будет на 6 часов раньше в UTC, поэтому мне нужно преобразовать его в UTC.

Итак, я сделал это, и сообщение было отправлено, телефоны получили его, и все прошло хорошо. За исключением случаев, когда мы пошли читать сообщение: мы получили сообщение об ошибке, в котором говорилось, что сообщение было удалено.

Мы не удаляли его, так что я думаю, что, возможно (еще 6 часов не прошло) телефоны пользователей получат новую трансляцию в будущем, но они были проинформированы об оповещении сейчас. Это оповещение еще не отображается, поэтому выдает ошибку. По крайней мере, я так думаю; еще не прошло 6 часов, так что я не могу это доказать.

Моя проблема заключается в следующем: Как мне сообщить Urban Airship, что я хочу, чтобы сообщение было отправлено немедленно, без необходимости добавлять 6 часов к текущему времени, чтобы сделать его «настоящим», а также фактически получать телефоны. в нужное время?

Я связался с UA, но они сказали: «ожидайте недельную задержку с ответом вам» (не торопитесь, а?), и я погуглил код ошибки (40700) и ничего не нашел. Затем я отправил электронное письмо парню, который построил оригинал, и все, что он сказал, было «UTC очень важно». Спасибо тебе за это.

Если кто-нибудь может мне помочь, я был бы очень благодарен.

Спасибо.

О, и если кому-то интересно, json, который я отправляю, выглядит следующим образом:

{"schedule":{"scheduled_time":"2013-10-12 06:46:00"},"push":{"audience":"all","notification":{"alert":"Message\r\nKenton Industries\r\nKenton Test","ios":{"sound":"police.mp3","extra":{"id":"406"},"badge":"+1"},"android":{"extra":{"id":"406"}},"blackberry":{"content-type":"text\/plain","body":"{\"id\":\"406\",\"body\":\"Kenton Industries\\r\\nKenton Test\",\"type\":\"Message\"}"}},"device_types":["ios","android","blackberry"]}}

Спасибо :)


Ответы:


1

Я не уверен, что понимаю вторую часть вашего вопроса о том, «чтобы телефоны получали это в нужное время». Что касается вопроса «Как мне сообщить Urban Airship, что я хочу, чтобы сообщение было опубликовано немедленно, без необходимости добавлять 6 часов к текущему времени, чтобы сделать его «настоящим»»:

Если вы хотите, чтобы ваши пользователи получили сообщение как можно скорее, вам не следует планировать свое сообщение. С помощью их примеров скручивания немедленный запрос скручивания push-сообщения должен выглядеть так:

curl -v -X POST -u "<AppKey>:<MasterSecret>" -H "Content-type: application/json" -H "Accept: application/vnd.urbanairship+json; version=3;" --data '{"audience" : "all", "device_types" : "all", "notification" : {"alert": "This is a broadcast"} }' https://go.urbanairship.com/api/push/ 
13.11.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..