1Net::GitHub::V3(3) User Contributed Perl Documentation Net::GitHub::V3(3)
2
3
4
6 Net::GitHub::V3 - Github API v3
7
9 Prefer:
10
11 use Net::GitHub;
12 my $gh = Net::GitHub->new(
13 version => 3,
14 login => 'fayland', pass => 'mypass',
15 # or
16 # access_token => $oauth_token
17 );
18
19 Or:
20
21 use Net::GitHub::V3;
22 my $gh = Net::GitHub::V3->new(
23 login => 'fayland', pass => 'mypass',
24 # or
25 # access_token => $oauth_token
26 );
27
29 <http://developer.github.com/v3/>
30
31 ATTRIBUTES
32 Authentication
33
34 There are two ways to authenticate through GitHub API v3:
35
36 login/pass
37 my $gh = Net::GitHub::V3->new( login => $ENV{GITHUB_USER}, pass => $ENV{GITHUB_PASS} );
38
39 access_token
40 my $gh = Net::GitHub->new( access_token => $ENV{GITHUB_ACCESS_TOKEN} );
41
42 raw_response
43
44 my $gh = Net::GitHub->new(
45 # login/pass or access_token
46 raw_response => 1
47 );
48
49 return raw HTTP::Response object
50
51 raw_string
52
53 my $gh = Net::GitHub->new(
54 # login/pass or access_token
55 raw_string => 1
56 );
57
58 return HTTP::Response response content as string
59
60 api_throttle
61
62 my $gh = Net::GitHub->new(
63 # login/pass or access_token
64 api_throttle => 0
65 );
66
67 To disable call rate limiting (e.g. if your account is whitelisted),
68 set api_throttle to 0.
69
70 RaiseError
71
72 By default, error responses are propagated to the user as they are
73 received from the API. By switching RaiseError on you can make the be
74 turned into exceptions instead, so that you don't have to check for
75 error response after every call.
76
77 Iterating over pages: next_url, last_url, prev_url, first_url, per_page
78
79 Any methods which return multiple results may be paginated. After
80 performing a query you should check to see if there are more results.
81 These attributes will be reset for each query.
82
83 The predicates to check these attributes are "has_next_page",
84 "has_last_page", "has_prev_page" and "has_first_page".
85
86 "per_page" defaults to 100. It will be applied to GET urls no matter it
87 supports or not.
88
89 See Github's documentation:
90 <http://developer.github.com/v3/#pagination>
91
92 my @issues = $gh->issue->repos_issues;
93 while ($gh->issue->has_next_page) {
94 push @issues, $gh->issue->query($gh->issue->next_url);
95 ## OR ##
96 push @issues, $gh->issue->next_page;
97 }
98
99 Iterating over individual items: next_xxx and close_xxx
100
101 The queries which can return paginated results can also be evaluated
102 one by one, like this:
103
104 while (my $issue = $gh->issue->next_repos_issue( @args )) {
105 # do something with $issue
106 }
107
108 The arguments to next_repos_issue are the same as for repos_issues, and
109 is also applicable to all other interfaces which offer a next_xxx
110 method. All available next_xxx methods are listed in the documentation
111 of the corresponding modules, see the list below.
112
113 If you loop over the next_xxx interfaces, new API calls will be
114 performed automatically, but only when needed to fetch more items. An
115 undefined return value means there are no more items.
116
117 To start over with the first item, you need to close the iteration.
118 Every next_xxx method has a corresponding close_xxx method which must
119 be called with exactly the same parameters as the next_xxx method to
120 take effect:
121
122 $gh->issue->close_repos_issue(@args);
123
124 If you use Net::GitHub::V3 in a command line program, there is no need
125 to call the close_xxx methods at all. As soon as the Net::GitHub::V3
126 object $gh goes out of scope, everything is neatly cleaned up.
127
128 However, if you have a long-lived Net::GitHub::V3 object, e.g. in a
129 persistent service process which provides an own interface to its users
130 and talks to GitHub under the hood, then it is advisable to close the
131 iterations when you're done with them.
132
133 For brevity and because they usually are not needed, the close_xxx
134 methods are not listed with their modules. It is guaranteed that every
135 next_xxx method has a corresponding close_xxx method.
136
137 Alternate iterator over individual items:
138
139 If next_xxx and close_xxx methods are not available for your pagination
140 method you can use a generic iterator using the "iterate" helper.
141
142 $gh->issues->iterate( 'repos_issues', [ @args ], sub {
143 my $issue = shift;
144
145 ... # do something with $issue
146
147 return 1; # if you want to continue iterating
148 return; # when you want to interrupt the iteration process
149 } );
150
151 ua
152
153 To set the proxy for ua, you can do something like following
154
155 $gh->ua->proxy('https', 'socks://127.0.0.1:9050');
156
157 $gh->ua is an instance of LWP::UserAgent
158
159 METHODS
160 query($method, $url, $data)
161
162 my $data = $gh->query('/user');
163 $gh->query('PATCH', '/user', $data);
164 $gh->query('DELETE', '/user/emails', [ 'myemail@somewhere.com' ]);
165
166 query API directly
167
168 next_page
169
170 When the results have been paginated, "next_page" is sugar for the
171 common case of iterating through all the pages in order. It simply
172 calls "query" with the "next_url".
173
174 set_default_user_repo
175
176 $gh->set_default_user_repo('fayland', 'perl-net-github'); # take effects for all $gh->
177 $gh->repos->set_default_user_repo('fayland', 'perl-net-github'); # take effects on $gh->repos
178
179 To ease the keyboard, we provided two ways to call any method which
180 starts with :user/:repo
181
182 1. SET user/repos before call methods below
183
184 $gh->set_default_user_repo('fayland', 'perl-net-github');
185 my @contributors = $gh->repos->contributors;
186
187 2. If it is just for once, we can pass :user, :repo before any
188 arguments
189
190 my @contributors = $repos->contributors($user, $repo);
191
192 MODULES
193 user
194
195 my $user = $gh->user->show('nothingmuch');
196 $gh->user->update( bio => 'Just Another Perl Programmer' );
197
198 Net::GitHub::V3::Users
199
200 repos
201
202 my @repos = $gh->repos->list;
203 my $rp = $gh->repos->create( {
204 "name" => "Hello-World",
205 "description" => "This is your first repo",
206 "homepage" => "https://github.com"
207 } );
208
209 Net::GitHub::V3::Repos
210
211 issue
212
213 my @issues = $gh->issue->issues();
214 my $issue = $gh->issue->issue($issue_number);
215
216 Net::GitHub::V3::Issues
217
218 pull_request
219
220 my @pulls = $gh->pull_request->pulls();
221
222 Net::GitHub::V3::PullRequests
223
224 org
225
226 my @orgs = $gh->org->orgs;
227
228 Net::GitHub::V3::Orgs
229
230 git_data
231
232 Net::GitHub::V3::GitData
233
234 gist
235
236 Net::GitHub::V3::Gists
237
238 oauth
239
240 Net::GitHub::V3::OAuth
241
242 event
243
244 Net::GitHub::V3::Events
245
246 search
247
248 Net::GitHub::V3::Search
249
251 Pithub
252
254 Refer Net::GitHub
255
256
257
258perl v5.34.0 2021-07-22 Net::GitHub::V3(3)