Tôi muốn bắt đầu sử dụng Amazon Simple Notification Service, nhưng tôi chưa tìm thấy bất kỳ thư viện Perl nào mà tôi có thể sử dụng để truy cập dịch vụ. Tôi không muốn tạo thư viện của riêng mình, tôi muốn xem liệu có ai đã sử dụng bất kỳ thư viện Perl nào cho dịch vụ SNS hay không và liệu họ có muốn giới thiệu bất kỳ thư viện nào không.Amazon SNS (Dịch vụ thông báo đơn giản) Thư viện Perl
Trả lời
tôi đã sử dụng Net :: Amazon :: AWSSign kết hợp với một kịch bản nhỏ:
#!/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;
Tôi thực sự sử dụng XML :: Simple cuối cùng, và thông qua kết quả từ Curl để XMLIn, để phân tích XML mà Amazon trả về. Hãy làm những gì bạn sẽ ...
Amazon::SNS tồn tại. Các tài liệu khá thưa thớt nhưng có vẻ như nó cơ bản, và chất lượng mã có vẻ ổn với tôi.
Tôi đã sử dụng Brad làm điểm xuất phát, cảm ơn Brad! Tôi đã thay đổi giờ địa phương thành gmtime. Tôi cũng không sử dụng các chủ đề nhưng ARN mục tiêu và sử dụng xác thực dựa trên vai trò. Tôi đã phải vượt qua các SecurityToken để làm cho nó hoạt động và tin nhắn chỉ làm việc cho android đẩy khi tôi đặt nó trong một wrapper json GCM. Trong mã tôi sử dụng tên ứng dụng của tôi trong TargetARN để phát hiện nền tảng và điều chỉnh tải trọng tương ứng. Lưu ý: Mã Windows chưa được kiểm tra.
Một mục cuối cùng của ghi chú là mã hóa json lồng nhau điên mà dường như được yêu cầu của 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. Dịch vụ thông báo đơn giản Amazon AWSSDK C# - S.O.S
- 2. Amazon SNS -> SQS nội dung thư
- 3. Hiệu suất của Dịch vụ đẩy di động mới của Amazon SNS
- 4. PHP đơn giản và thư viện oAuth
- 5. Thông báo đẩy trên Android: Google GCM so với Amazon SNS?
- 6. Dịch vụ thông báo đơn giản của Amazon có thể "đẩy" các thông báo tới một ứng dụng máy tính để bàn không?
- 7. Thư viện Crypto đơn giản cho iOS
- 8. Thư viện máy chủ AtomPub đơn giản
- 9. thư viện bcrypt đơn giản cho C
- 10. Sử dụng Dịch vụ lưu trữ đơn giản Amazon (S3) trên Android
- 11. Tự động xử lý các thông báo SES của Amazon về thông báo trả lại và khiếu nại
- 12. Tôi cần dịch vụ nào của Amazon để truy vấn đơn giản tiêu đề sách, ISBN và nhà xuất bản?
- 13. Dịch vụ báo cáo máy chủ SQL cho Amazon RDS
- 14. Thư viện UDP C++ đáng tin cậy đơn giản
- 15. Có cách nào đơn giản để dừng dịch vụ để phản hồi người dùng nhấp vào thông báo không?
- 16. Dịch vụ Bắt đầu từ Thông báo
- 17. Dừng dịch vụ nền từ thông báo
- 18. Dịch vụ thông báo qua email
- 19. thư viện malloc đơn giản và di động
- 20. Khuôn mẫu khám phá dịch vụ Java đơn giản
- 21. Tôi có thể sử dụng thư viện nào để truyền thông điệp đơn giản, nhẹ nhàng?
- 22. C++: Thư viện đơn giản nhất để mở tệp video
- 23. Thư viện MIDI đơn giản, nền tảng chéo cho Python
- 24. zf2 Tạo dịch vụ đơn giản và truy cập nó thông qua viewhelper
- 25. Tại sao dịch vụ đơn giản này không bắt đầu?
- 26. Nhà cung cấp dịch vụ đơn giản OAuth
- 27. "Dịch vụ web" bằng tiếng Anh đơn giản là gì?
- 28. Vấn đề Calling Thư viện dịch vụ WCF từ jQuery
- 29. Có dịch vụ thông báo đẩy nào trong Android như Dịch vụ thông báo của Apple Push không?
- 30. Thư viện dịch vụ WCF và loại dự án thư viện lớp học
Có. Tôi đã thử điều đó. Nhiều vấn đề. – Brad
@Brad hãy cho tôi biết các sự cố bạn đã gặp phải.Phiên bản mới nhất có sẵn tại https://github.com/dwery/amazon-sns – dwery