Quería comenzar a usar el Amazon Simple Notification Service, pero no he encontrado ninguna biblioteca Perl que pueda usar para acceder al servicio. Preferiría no crear mi propia biblioteca, quería ver si alguien ha utilizado alguna biblioteca Perl para el servicio SNS, y si lo recomendaría.Amazon SNS (Servicio simple de notificación) Librerías Perl
Respuesta
utilicé Net :: Amazon :: AWSSign en conjunción con una pequeña secuencia de comandos:
#!/usr/bin/perl
use Net::Amazon::AWSSign;
$ACCESS_KEY_ID="<my key id>";
$SECRET_KEY="<my secret key>";
$TOPIC_ARN='<my topic arn>';
$TOPIC_ARN =~ s/:/%3A/g;
$MESSAGE="This is a test";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon+=1;
$timestamp = sprintf("%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d.000Z",
$year,$mon,$mday,$hour,$min,$sec);
$timestamp =~ s/:/%3A/g;
$REQUEST="http://sns.us-east-1.amazonaws.com/".
"?TopicArn=$TOPIC_ARN".
"&Message=$MESSAGE".
"&Action=Publish".
"&SignatureVersion=2".
"&SignatureMethod=HmacSHA256".
"&Timestamp=$timestamp".
"&AWSAccessKeyId=$ACCESS_KEY_ID";
my $awsSign=new Net::Amazon::AWSSign("$ACCESS_KEY_ID", "$SECRET_KEY");
$signed = $awsSign->addRESTSecret($REQUEST);
$res = `curl -s -o- '$signed'`;
if ($res =~ /<error>/) {
print "ERROR!\n";
return 1;
}
0;
realidad utilicé XML :: Simple en el final, y se pasa el resultado a partir del rizo a XMLIn, para analizar el XML que Amazon devuelve. Haz lo que quieras ...
Amazon::SNS existe. Los documentos son bastante escasos, pero parece que es lo básico, y la calidad del código se ve bien para mí.
Utilicé Brad's como punto de partida, ¡gracias Brad! Tuve el cambio del horario local a gmtime. Tampoco estaba usando temas, sino ARNs de destino y el uso de la autenticación basada en roles. Tuve que pasar el SecurityToken para que funcione y el mensaje solo funcionó para Android cuando lo puse en un contenedor GCM json. En el código, uso mi nombre de aplicación en TargetARN para detectar la plataforma y ajustar la carga útil en consecuencia. Nota: Código de Windows no probado.
Una última nota importante es la loca codificación anidada json que parece ser necesaria para SNS.
sub send_sns
{
# required arguments: endpoint (AWS SNS endpoint), message
my $args = shift;
my $TargetArn=encode_url($args->{endpoint});
my $message=$args->{message};
my $data = {};
my $json = JSON->new->utf8->allow_nonref;
if ($args->{endpoint} =~ /GCM\/[a-z]+_android\//) {
# Android
$data->{data}{message}=$args->{message};
my $dataString = $json->encode($data);
$message = '{"GCM": '.$json->encode($dataString).'}';
} elsif ($args->{endpoint} =~ /APNS\/[a-z]+_apple_ios\//) {
# iOS
$data->{aps}{alert}=$args->{message};
my $dataString = $json->encode($data);
$message = '{"APNS": '.$json->encode($dataString).'}';
} elsif ($args->{endpoint} =~ /ADM\/[a-z]+_windows\//) {
# windows (incomplete)
$data->{data}{message}=$args->{message};
my $dataString = $json->encode($data);
$message = '{"ADM": '.$json->encode($dataString).'}';
}
use Net::Amazon::AWSSign;
my $credentials = qx[ curl -s --fail http://169.254.169.254/latest/meta-data/iam/security-credentials/myrole ];
my $credObj = decode_json($credentials);
my $ACCESS_KEY_ID=$credObj->{AccessKeyId};
my $SECRET_KEY=$credObj->{SecretAccessKey};
my $token=$credObj->{Token};
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time);
$year += 1900;
$mon+=1;
my $timestamp = sprintf("%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d.000Z",
$year,$mon,$mday,$hour,$min,$sec);
$timestamp =~ s/:/%3A/g;
my $REQUEST="http://sns.us-east-1.amazonaws.com/".
"?TargetArn=$TargetArn".
"&Message=$message".
"&Action=Publish".
"&SignatureVersion=2".
"&SignatureMethod=HmacSHA256".
"&Timestamp=$timestamp".
"&SecurityToken=$token".
"&MessageStructure=json".
"&AWSAccessKeyId=$ACCESS_KEY_ID";
my $awsSign=new Net::Amazon::AWSSign("$ACCESS_KEY_ID", "$SECRET_KEY");
my $signed = $awsSign->addRESTSecret($REQUEST);
$res = `curl -s -o- '$signed'`;
print "returns: $res\n" if -t;
if ($res =~ /<error>/) {
print "ERROR!\n";
return 1;
} else {
return 0;
}
}
- 1. PHP Libraries for Amazon Servicio simple de notificación
- 2. Amazon Simple Notification Service (SNS) para notificaciones push en iOS?
- 3. Trabajando con Amazon SQS & SNS en Java
- 4. Amazon SNS -> cuerpo del mensaje SQS
- 5. ¿Es posible recibir un mensaje de Amazon SNS en un script JS?
- 6. Notificaciones push en Android: Google GCM vs. Amazon SNS?
- 7. ¿Existe un código abierto equivalente a Amazon SNS?
- 8. Confirmar suscripción de SNS en HTTP
- 9. Servicio de accesibilidad de Android detectar notificación
- 10. Icono de notificación para servicio de ventana
- 11. android push notificación de servicio de comparación
- 12. Cómo eliminar eventos de una cola de Amazon SQS (servicio de cola simple) realmente rápido?
- 13. Cita simple de Perl regex
- 14. Uso del servicio de almacenamiento simple de Amazon (S3) en Android
- 15. colas de mensajes asíncronos y procesamiento como Amazon servicio de cola simple en Django
- 16. Tutorial para PHP Amazon Simple Storage Service
- 17. Iniciar el servicio desde la notificación
- 18. Análisis JSON simple usando Perl
- 19. procesamiento paralelo simple en perl
- 20. Amazon AWS tutoriales?
- 21. Error de Java APNS (Servicio de notificación push de Apple)
- 22. pérdida de memoria de Android en el servicio de notificación
- 23. librerías de aserciones independientes?
- 24. Rails 3 y el servicio de notificación push de apple
- 25. ¿Es confiable el servicio de notificación push de Apple?
- 26. Creación de un servicio web con Perl
- 27. Mostrar siempre el servicio en la barra de notificación
- 28. ¿Hay algún costo por usar el servicio de notificación push?
- 29. servicio web de Amazon como Rails hosting, posible?
- 30. Amazon SimpleDB vs Amazon DynamoDB
Sí. Intenté eso. Numerosos numerosos problemas – Brad
@Brad por favor, hágamelo saber los problemas que ha enfrentado. Versión más reciente disponible en https://github.com/dwery/amazon-sns – dwery