File Coverage

blib/lib/Net/LineNotify.pm
Criterion Covered Total %
statement 20 32 62.5
branch 1 6 16.6
condition 1 2 50.0
subroutine 6 6 100.0
pod 2 2 100.0
total 30 48 62.5


line stmt bran cond sub pod time code
1             package Net::LineNotify;
2              
3 1     1   141494 use strict;
  1         3  
  1         66  
4 1     1   16 use warnings;
  1         2  
  1         85  
5 1     1   1087 use LWP::UserAgent;
  1         82980  
  1         57  
6 1     1   807 use HTTP::Request::Common;
  1         3414  
  1         436  
7              
8             our $VERSION = '0.02';
9              
10             # コンストラクタ
11             sub new {
12 1     1 1 234386 my ($class, %args) = @_;
13             my $self = {
14             access_token => $args{access_token}, # アクセストークン
15 1   50     11 test_mode => $args{test_mode} // 0, # テストモードフラグ
16             };
17 1         3 bless $self, $class;
18 1         5 return $self;
19             }
20              
21             # LINE Notifyにメッセージを送信するメソッド
22             sub send_message {
23 1     1 1 777 my ($self, $message) = @_;
24              
25             # テストモードの場合、リクエストを送信せず成功を返す
26 1 50       9 if ($self->{test_mode}) {
27 1         84 warn "テストモード: メッセージ送信は実行されません\n";
28 1         9 return 1;
29             }
30              
31 0           my $url = 'https://notify-api.line.me/api/notify';
32              
33             # UserAgentのセットアップ
34 0           my $ua = LWP::UserAgent->new;
35 0           $ua->timeout(10);
36 0           $ua->env_proxy;
37              
38             # POSTリクエストの作成
39             my $req = POST(
40             $url,
41             'Authorization' => "Bearer " . $self->{access_token}, # トークンをヘッダーに追加
42 0           Content_Type => 'form-data',
43             Content => [ message => $message ], # メッセージを送信
44             );
45              
46             # リクエストを送信し、レスポンスを受け取る
47 0           my $response = $ua->request($req);
48              
49             # レスポンスのステータスコードを確認
50 0 0         if ($response->is_success) {
51 0           return 1; # 成功
52             } else {
53             # ステータスコードに応じてエラーメッセージを表示
54 0 0         if ($response->code == 401) {
55 0           warn "エラー: 認証に失敗しました。アクセストークンが無効です。\n";
56             } else {
57 0           warn "エラー: " . $response->status_line . "\n";
58             }
59 0           return 0; # 失敗
60             }
61             }
62              
63             1; # パッケージの終わりには1を返す必要があります。
64              
65             __END__