.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.40) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Twitter::API::Error 3pm" .TH Twitter::API::Error 3pm "2021-09-11" "perl v5.32.1" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Twitter::API::Error \- Twitter API exception .SH "VERSION" .IX Header "VERSION" version 1.0006 .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 3 \& use Try::Tiny; \& use Twitter::API; \& use Twitter::API::Util \*(Aqis_twitter_api_error\*(Aq; \& \& my $client = Twitter::API\->new(%options); \& \& try { \& my $r = $client\->get(\*(Aqaccount/verify_credentials\*(Aq); \& } \& catch { \& die $_ unless is_twitter_api_error($_); \& \& warn "Twitter says: ", $_\->twitter_error_text; \& }; .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" Twitter::API dies, throwing a Twitter::API::Error exception when it receives an error. The error object contains information about the error so your code can decide how to respond to various error conditions. .SH "METHODS" .IX Header "METHODS" .SS "http_request" .IX Subsection "http_request" Returns the HTTP::Request object used to make the Twitter \s-1API\s0 call. .SS "http_response" .IX Subsection "http_response" Returns the HTTP::Response object for the \s-1API\s0 call. .SS "twitter_error" .IX Subsection "twitter_error" Returns the inflated \s-1JSON\s0 error response from Twitter (if any). .SS "stack_trace" .IX Subsection "stack_trace" Returns a Devel::StackTrace object encapsulating the call stack so you can discover, where, in your application the error occurred. .SS "stack_frame" .IX Subsection "stack_frame" Delegates to \f(CW\*(C`stack_trace\->frame\*(C'\fR. See Devel::StackTrace for details. .SS "next_stack_fram" .IX Subsection "next_stack_fram" Delegates to \f(CW\*(C`stack_trace\->next_frame\*(C'\fR. See Devel::StackTrace for details. .SS "error" .IX Subsection "error" Returns a reasonable string representation of the exception. If Twitter returned error information in the form of a \s-1JSON\s0 body, it is mined for error text. Otherwise, the \s-1HTTP\s0 response status line is used. The stack frame is mined for the point in your application where the request initiated and appended to the message. .PP When used in a string context, \f(CW\*(C`error\*(C'\fR is called to stringify exception. .SS "twitter_error_code" .IX Subsection "twitter_error_code" Returns the numeric error code returned by Twitter, or 0 if there is none. See for details. .SS "is_token_error" .IX Subsection "is_token_error" Returns true if the error represents a problem with the access token or its Twitter account, rather than with the resource being accessed. .PP Some Twitter error codes indicate a problem with authentication or the token/secret used to make the \s-1API\s0 call. For example, the account has been suspended or access to the application revoked by the user. Other error codes indicate a problem with the resource requested. For example, the target account no longer exists. .PP is_token_error returns true for the following Twitter \s-1API\s0 errors: .IP "\(bu" 4 32: Could not authenticate you .IP "\(bu" 4 64: Your account is suspended and is not permitted to access this feature .IP "\(bu" 4 88: Rate limit exceeded .IP "\(bu" 4 89: Invalid or expired token .IP "\(bu" 4 99: Unable to verify your credentials. .IP "\(bu" 4 135: Could not authenticate you .IP "\(bu" 4 136: You have been blocked from viewing this user's profile. .IP "\(bu" 4 215: Bad authentication data .IP "\(bu" 4 226: This request looks like it might be automated. To protect our users from spam and other malicious activity, we canXt complete this action right now. .IP "\(bu" 4 326: To protect our users from spamX .PP For error 215, Twitter's \s-1API\s0 documentation says, \*(L"Typically sent with 1.1 responses with \s-1HTTP\s0 code 400. The method requires authentication but it was not presented or was wholly invalid.\*(R" In practice, though, this error seems to be spurious, and often succeeds if retried, even with the same tokens. .PP The Twitter \s-1API\s0 documentation describes error code 226, but in practice, they use code 326 instead, so we check for both. This error code means the account the tokens belong to has been locked for spam like activity and can't be used by the \s-1API\s0 until the user takes action to unlock their account. .PP See Twitter's Error Codes & Responses documentation for more information. .SS "http_response_code" .IX Subsection "http_response_code" Delegates to \f(CW\*(C`http_response\->code\*(C'\fR. Returns the \s-1HTTP\s0 status code of the response. .SS "is_pemanent_error" .IX Subsection "is_pemanent_error" Returns true for \s-1HTTP\s0 status codes representing an error and with values less than 500. Typically, retrying an \s-1API\s0 call with one of these statuses right away will simply result in the same error, again. .SS "is_temporary_error" .IX Subsection "is_temporary_error" Returns true or \s-1HTTP\s0 status codes of 500 or greater. Often, these errors indicate a transient condition. Retrying the \s-1API\s0 call right away may result in success. See the RetryOnError for automatically retrying temporary errors. .SH "AUTHOR" .IX Header "AUTHOR" Marc Mims .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" This software is copyright (c) 2015\-2021 by Marc Mims. .PP This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.