1- <!DOCTYPE html>
1+ <!doctype html>
22< html lang ="en ">
3- < head >
4- < meta charset ="UTF-8 " />
5- < meta name ="viewport " content ="width=device-width, initial-scale=1.0 " />
6- < title > RateMyProfessors API Client (Python)</ title >
7- < link rel ="icon " href ="favicon.svg " type ="image/svg+xml " />
8- < link rel ="stylesheet " href ="style.css " />
9- < link id ="hljs-theme " rel ="stylesheet " href ="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/styles/github-dark.min.css " />
10- < script src ="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/highlight.min.js "> </ script >
11- < script >
12- ( function ( ) { var t = localStorage . getItem ( 'rmp-docs-theme' ) ; var d = t === 'dark' || ( ! t && window . matchMedia ( '(prefers-color-scheme:dark)' ) . matches ) ; if ( d ) document . documentElement . classList . add ( 'dark' ) } ) ( ) ;
13- </ script >
14- </ head >
15- < body >
16- < header class ="topbar ">
17- < div class ="topbar-right ">
18- < a href ="https://github.com/amaanjaved1/Rate-My-Professors-API-Client " class ="topbar-btn " target ="_blank " rel ="noopener " aria-label ="GitHub ">
19- < svg width ="18 " height ="18 " viewBox ="0 0 24 24 " fill ="currentColor "> < path d ="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z "/> </ svg >
20- </ a >
21- < button class ="topbar-btn " id ="theme-toggle " aria-label ="Toggle theme "> </ button >
22- </ div >
23- </ header >
3+ < head >
4+ < meta charset ="UTF-8 " />
5+ < meta name ="viewport " content ="width=device-width, initial-scale=1.0 " />
6+ < title > RateMyProfessors API Client (Python)</ title >
7+ < link rel ="icon " href ="favicon.svg " type ="image/svg+xml " />
8+ < link rel ="stylesheet " href ="style.css " />
9+ < link
10+ id ="hljs-theme "
11+ rel ="stylesheet "
12+ href ="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/styles/github-dark.min.css "
13+ />
14+ < script src ="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/highlight.min.js "> </ script >
15+ < script >
16+ ( function ( ) {
17+ var t = localStorage . getItem ( "rmp-docs-theme" ) ;
18+ var d =
19+ t === "dark" ||
20+ ( ! t && window . matchMedia ( "(prefers-color-scheme:dark)" ) . matches ) ;
21+ if ( d ) document . documentElement . classList . add ( "dark" ) ;
22+ } ) ( ) ;
23+ </ script >
24+ </ head >
25+ < body >
26+ < header class ="topbar ">
27+ < div class ="topbar-right ">
28+ < a
29+ href ="https://github.com/amaanjaved1/Rate-My-Professors-API-Client "
30+ class ="topbar-btn "
31+ target ="_blank "
32+ rel ="noopener "
33+ aria-label ="GitHub "
34+ >
35+ < svg width ="18 " height ="18 " viewBox ="0 0 24 24 " fill ="currentColor ">
36+ < path
37+ d ="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z "
38+ />
39+ </ svg >
40+ </ a >
41+ < button
42+ class ="topbar-btn "
43+ id ="theme-toggle "
44+ aria-label ="Toggle theme "
45+ > </ button >
46+ </ div >
47+ </ header >
2448
25- < aside class ="sidebar ">
26- < div class ="sidebar-brand "> RMP API Docs</ div >
27- < nav > < ul >
28- < li > < a href ="index.html " class ="active "> Home</ a > </ li >
29- < li > < a href ="usage.html "> Usage</ a > </ li >
30- < li > < a href ="reference.html "> API Reference</ a > </ li >
31- < li > < a href ="configuration.html "> Configuration</ a > </ li >
32- < li > < a href ="extras.html "> Extras</ a > </ li >
33- </ ul > </ nav >
34- </ aside >
49+ < aside class ="sidebar ">
50+ < div class ="sidebar-brand "> RMP API Docs</ div >
51+ < nav >
52+ < ul >
53+ < li > < a href ="index.html " class ="active "> Home</ a > </ li >
54+ < li > < a href ="usage.html "> Usage</ a > </ li >
55+ < li > < a href ="reference.html "> API Reference</ a > </ li >
56+ < li > < a href ="configuration.html "> Configuration</ a > </ li >
57+ < li > < a href ="extras.html "> Extras</ a > </ li >
58+ </ ul >
59+ </ nav >
60+ </ aside >
3561
36- < main class ="content ">
37- < h1 > RateMyProfessors API Client</ h1 >
38- < div class ="badges ">
39- < a href ="https://pypi.org/project/ratemyprofessors-client/ "> < img src ="https://img.shields.io/pypi/v/ratemyprofessors-client?color=10b981&cacheSeconds=300 " alt ="PyPI " /> </ a >
40- < a href ="https://pypi.org/project/ratemyprofessors-client/ "> < img src ="https://img.shields.io/pepy/dt/ratemyprofessors-client?cacheSeconds=300 " alt ="downloads " /> </ a >
41- </ div >
42- < p >
43- An unofficial, typed Python client for < a href ="https://www.ratemyprofessors.com "> RateMyProfessors</ a > .
44- All data is fetched via RMP's GraphQL API — no HTML scraping or browser automation required.
45- </ p >
62+ < main class ="content ">
63+ < h1 > RateMyProfessors API Client</ h1 >
64+ < div class ="badges ">
65+ < a href ="https://pypi.org/project/ratemyprofessors-client/ "
66+ > < img
67+ src ="https://img.shields.io/pypi/v/ratemyprofessors-client?color=10b981&cacheSeconds=300 "
68+ alt ="PyPI "
69+ /> </ a >
70+ < a href ="https://pypi.org/project/ratemyprofessors-client/ "
71+ > < img
72+ src ="https://img.shields.io/pepy/dt/ratemyprofessors-client?cacheSeconds=300 "
73+ alt ="downloads "
74+ /> </ a >
75+ </ div >
76+ < p >
77+ An unofficial, typed Python client for
78+ < a href ="https://www.ratemyprofessors.com "> RateMyProfessors</ a > . All
79+ data is fetched via RMP's GraphQL API — no HTML scraping or
80+ browser automation required.
81+ </ p >
4682
47- < div class ="callout ">
48- < strong > Disclaimer:</ strong > This library is unofficial and may break if RMP changes their internal API. Use responsibly and respect rate limits.
49- </ div >
83+ < div class ="callout ">
84+ < strong > Disclaimer:</ strong > This library is unofficial and may break if
85+ RMP changes their internal API. Use responsibly and respect rate limits.
86+ </ div >
5087
51- < h2 id ="features "> Features < a href ="#features " class ="anchor "> #</ a > </ h2 >
52- < ul >
53- < li > Strong typing via Pydantic models</ li >
54- < li > Automatic retries with configurable max attempts</ li >
55- < li > Token-bucket rate limiting (default 60 req/min)</ li >
56- < li > In-memory caching for ratings pages</ li >
57- < li > Cursor-based pagination for all list/search endpoints</ li >
58- < li > Clear error hierarchy for precise exception handling</ li >
59- < li > Built-in helpers for ingestion workflows (sentiment, comment validation, course codes)</ li >
60- </ ul >
88+ < h2 id ="features "> Features < a href ="#features " class ="anchor "> #</ a > </ h2 >
89+ < ul >
90+ < li > Strong typing via Pydantic models</ li >
91+ < li > Automatic retries with configurable max attempts</ li >
92+ < li > Token-bucket rate limiting (default 60 req/min)</ li >
93+ < li > In-memory caching for ratings pages</ li >
94+ < li > Cursor-based pagination for all list/search endpoints</ li >
95+ < li > Clear error hierarchy for precise exception handling</ li >
96+ < li >
97+ Built-in helpers for ingestion workflows (sentiment, comment
98+ validation, course codes)
99+ </ li >
100+ </ ul >
61101
62- < h2 id ="requirements "> Requirements < a href ="#requirements " class ="anchor "> #</ a > </ h2 >
63- < ul >
64- < li > < strong > Python 3.10</ strong > or later</ li >
65- < li > Works with type checkers (Pydantic models, fully typed API)</ li >
66- </ ul >
102+ < h2 id ="requirements ">
103+ Requirements < a href ="#requirements " class ="anchor "> #</ a >
104+ </ h2 >
105+ < ul >
106+ < li > < strong > Python 3.10</ strong > or later</ li >
107+ < li > Works with type checkers (Pydantic models, fully typed API)</ li >
108+ </ ul >
67109
68- < h2 id ="installation "> Installation < a href ="#installation " class ="anchor "> #</ a > </ h2 >
69- < pre > < code class ="language-bash "> pip install ratemyprofessors-client</ code > </ pre >
110+ < h2 id ="installation ">
111+ Installation < a href ="#installation " class ="anchor "> #</ a >
112+ </ h2 >
113+ < pre > < code class ="language-bash "> pip install ratemyprofessors-client</ code > </ pre >
70114
71- < h2 id ="quick-start "> Quick Start < a href ="#quick-start " class ="anchor "> #</ a > </ h2 >
72- < pre > < code class ="language-python "> from rmp_client import RMPClient
115+ < h2 id ="quick-start ">
116+ Quick Start < a href ="#quick-start " class ="anchor "> #</ a >
117+ </ h2 >
118+ < pre > < code class ="language-python "> from rmp_client import RMPClient
73119
74120with RMPClient() as client:
75121 prof = client.get_professor("2823076")
@@ -78,16 +124,33 @@ <h2 id="quick-start">Quick Start <a href="#quick-start" class="anchor">#</a></h2
78124 for rating in client.iter_professor_ratings(prof.id):
79125 print(rating.date, rating.quality, rating.comment)</ code > </ pre >
80126
81- < h2 id ="documentation "> Documentation < a href ="#documentation " class ="anchor "> #</ a > </ h2 >
82- < ul >
83- < li > < a href ="usage.html "> Usage</ a > — Quickstart examples for every endpoint</ li >
84- < li > < a href ="configuration.html "> Configuration</ a > — Tuning retries, rate limits, timeouts, and headers</ li >
85- < li > < a href ="reference.html "> API Reference</ a > — Full method and type reference</ li >
86- < li > < a href ="extras.html "> Extras</ a > — Ingestion helpers (sentiment, comment validation, course mapping)</ li >
87- </ ul >
88- </ main >
127+ < h2 id ="documentation ">
128+ Documentation < a href ="#documentation " class ="anchor "> #</ a >
129+ </ h2 >
130+ < ul >
131+ < li >
132+ < a href ="usage.html "> Usage</ a > — Quickstart examples for every
133+ endpoint
134+ </ li >
135+ < li >
136+ < a href ="configuration.html "> Configuration</ a > — Tuning retries,
137+ rate limits, timeouts, and headers
138+ </ li >
139+ < li >
140+ < a href ="reference.html "> API Reference</ a > — Full method and
141+ type reference
142+ </ li >
143+ < li >
144+ < a href ="extras.html "> Extras</ a > — Ingestion helpers (sentiment,
145+ comment validation, course mapping)
146+ </ li >
147+ </ ul >
148+ </ main >
89149
90- < aside class ="toc "> < div class ="toc-title "> On this page</ div > < ul id ="toc-list "> </ ul > </ aside >
91- < script src ="script.js "> </ script >
92- </ body >
150+ < aside class ="toc ">
151+ < div class ="toc-title "> On this page</ div >
152+ < ul id ="toc-list "> </ ul >
153+ </ aside >
154+ < script src ="script.js "> </ script >
155+ </ body >
93156</ html >
0 commit comments