[{"data":1,"prerenderedAt":307},["ShallowReactive",2],{"project-6169040":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":43,"post_text":45,"what":46,"said":78,"maker_in_thread":198,"shape":204,"grid":208,"attempts":269,"same_week":270,"maker_shows":41,"maker_hidden":299,"reader_version":300,"card":301},"6169040","Gmail","Python library to read and manage your Gmail","title","Show HN: Python library to read and manage your Gmail","https:\u002F\u002Fgithub.com\u002Fcharlierguo\u002Fgmail","github.com","charlierguo",1375821879,2013,158,29,104,1739,6,"notable","languages","python library","library",[24,25,26,27],"python","gmail","imap","email api","mixed",0.342,{"positive":31,"neutral":32,"mixed":33,"critical":34},8,4,3,2,17,{"privacy":37,"idea":39,"execution":40,"docs":42},{"positive":38,"critical":34},0,{"positive":18,"critical":38},{"positive":41,"critical":38},1,{"positive":38,"critical":38},[33,38,33,33,33,33,38,38,38,44,41,44,44,44,38,44,44,33,38,38,38,38,38,38,44,38,33,41,44],5,null,{"problem":47,"audience":56,"pricing":45,"motivation":67,"time_to_build":45,"stack":72,"openness":77,"stage":77,"team_size":77},{"value":48,"source":49,"evidence":50},"Reading and managing Gmail from Python code","inferred",[51,53],{"id":52},"post",{"id":54,"by":11,"text":55},"6170471","Thanks! I was working on a side project that needed to access my GMail, and I couldn't believe that a good library didn't exist already. If you find any bugs or use cases that…",{"value":57,"source":49,"evidence":58},"Python programmers working with Gmail",[59,63],{"id":60,"by":61,"text":62},"6170061","arms","Thank you for sharing this. I've been very interested in building my own Gmail client the past few weeks, and this looks like a nice starting point.",{"id":64,"by":65,"text":66},"6170252","maskedinvader","thank you for this. I was looking for something like this for a project I was working on",{"value":68,"source":69,"evidence":70},"Needed access to Gmail for a side project and found no good library","maker",[71],{"id":54,"by":11,"text":55},[73],{"value":74,"source":49,"evidence":75},"Python",[76],{"id":52},"unknown",{"praise":79,"objections":105,"requests":124,"questions":139,"alternatives":158},[80,93],{"value":81,"source":82,"evidence":83},"Useful and fills a gap; nothing similar existed","commenter",[84,88,92],{"id":85,"by":86,"text":87},"6170329","ibudiallo","Thank you, this is really useful. Just when I needed it and wanted to write one you posted it. I don't think I would have done half the good job you did.",{"id":89,"by":90,"text":91},"6171692","AnSavvides","Very cool - I am sure a lot of people will get good use out of it. Rather surprised nothing like this already existed.",{"id":64,"by":65,"text":66},{"value":94,"source":82,"evidence":95},"Good starting point for building Gmail clients or scripts",[96,97,101],{"id":60,"by":61,"text":62},{"id":98,"by":99,"text":100},"6171139","hatchoo","This is great. Thank you for sharing. I've been planning to create a Python script to help me automatically label my older emails based on content. This is a big help.",{"id":102,"by":103,"text":104},"6171226","deepGem","Guess I can potentially use this as a module in a tornado\u002FDjango web application for scheduling email, without having the user to sign in to gmail explicitly or opening up a…",[106,113],{"value":107,"source":82,"evidence":108},"Supports username\u002Fpassword login instead of only OAuth",[109],{"id":110,"by":111,"text":112},"6170902","duvander","I really wish the username\u002Fpassword option wasn't supported. What use cases aren't possible with OAuth?",{"value":114,"source":82,"evidence":115},"Works only with a Google service, not general email",[116,120],{"id":117,"by":118,"text":119},"6170767","kudu","This looks pretty nice. It's really too bad that it works with a Google service.",{"id":121,"by":122,"text":123},"6172022","mkesper","Right, who still wants to share their data with Google?",[125,132],{"value":126,"source":82,"evidence":127},"Explain how to get attachment files",[128],{"id":129,"by":130,"text":131},"6171786","bussiere","how to get the attachment files ? i didn't see anyhting in the doc about it ... Are they in the body ?",{"value":133,"source":82,"evidence":134},"Support for forwarding sent emails with large attachments",[135],{"id":136,"by":137,"text":138},"6171614","eliasmacpherson","This is really cool. The only thing I use gmail web interface for since I moved to mutt and IMAP, is forwarding already sent emails with large attachments to new addresses. They…",[140,147],{"value":141,"source":82,"evidence":142},"Is there a similar good library for Google Calendar?",[143],{"id":144,"by":145,"text":146},"6171260","superchink","Slightly off topic, but does anyone know of a similar library for Google Calendar that's any good?",{"value":148,"source":82,"evidence":149},"Is it safe to store passwords, e.g. via system keyring or OAuth",[150,154],{"id":151,"by":152,"text":153},"6169561","spindritf","You can also retrieve the password from your system keyring[1] ``` import keyring pass_is = keyring.get_password('gmail', 'whatever@gmail.com') ``` you set it with ```…",{"id":155,"by":156,"text":157},"6170613","grinich","Even better, use oauth2 tokens instead of your username\u002Fpassword. Here's a script to generate them: https:\u002F\u002Fgoogle-mail-oauth2-tools.googlecode.com\u002Fsvn\u002Ftrunk\u002Fpython\u002Foauth2.py",[159,166,173,180,191],{"value":160,"source":82,"evidence":161},"IMAPClient",[162],{"id":163,"by":164,"text":165},"6169672","kbar13","Cool! If you're looking for non-gmail-specific email lib thingerator, check out IMAPClient (it's better than imaplib I swear!): http:\u002F\u002Fimapclient.readthedocs.org\u002Fen\u002Flatest\u002F",{"value":167,"source":82,"evidence":168},"Imbox",[169],{"id":170,"by":171,"text":172},"6171629","ajaxaddicted","There is also Imbox https:\u002F\u002Fgithub.com\u002Fmartinrusev\u002Fimbox, which is a Python library for reading all kinds of IMAP mailboxes, not just Gmail",{"value":174,"source":82,"evidence":175},"Google Apps Script",[176],{"id":177,"by":178,"text":179},"6169909","mcrittenden","This is great. For the record, if you just need to do some simple scripting of your Gmail, maybe on cron, Google Apps Script is great for that.…",{"value":181,"source":82,"evidence":182},"Ruby gmail gem (nu7hatch\u002Fgmail)",[183,187],{"id":184,"by":185,"text":186},"6170109","knes","Didn't know the Ruby one existed, thanks for that!",{"id":188,"by":189,"text":190},"6171768","tejasbubane","I am using the Gmail gem (https:\u002F\u002Fgithub.com\u002Fnu7hatch\u002Fgmail) in couple of my rails projects and it works perfect. Every single mail is delivered.",{"value":192,"source":82,"evidence":193},"Google APIs Client Library for Python",[194],{"id":195,"by":196,"text":197},"6171483","astrada","There is the official Google APIs Client Library for Python (https:\u002F\u002Fdevelopers.google.com\u002Fgoogle-apps\u002Fcalendar\u002Fdownloads). You can even test the RESTful API online using the…",{"comments":34,"answered":38,"key":199},[200,201],{"id":54,"text":55},{"id":202,"text":203},"6170474","I built it because of a project I was working on :). Feel free to create an issue if you need some new features or have use cases that aren't covered.",{"commenters":205,"max_depth":32,"maker_replies":34,"first_comment_mins":206,"lifespan_hours":207},25,86,60,[209,211,215,216,218,219,221,223,224,226,228,230,232,233,236,238,240,242,245,247,250,253,255,256,258,260,261,263,264],[151,38,33,210,152,38],"project\u002Fneutral\u002Fprivacy",[212,38,38,213,214,38],"6169980","commenter\u002Fneutral\u002Fnone","codezero",[155,38,33,210,156,38],[177,41,33,217,178,38],"project\u002Fmixed\u002Fidea",[163,34,33,217,164,38],[170,33,33,220,171,38],"project\u002Fneutral\u002Fidea",[144,32,38,222,145,38],"other\u002Fneutral\u002Fnone",[195,32,38,222,196,38],[225,32,38,213,145,38],"6174885",[136,44,44,227,137,38],"project\u002Fpositive\u002Fidea",[110,18,41,229,111,38],"project\u002Fcritical\u002Fprivacy",[102,231,44,227,103,38],7,[98,31,44,227,99,38],[85,234,44,235,86,38],9,"maker\u002Fpositive\u002Fexecution",[54,234,38,237,11,41],"maker\u002Fneutral\u002Fnone",[60,239,44,227,61,38],10,[89,241,44,227,90,38],11,[129,243,33,244,130,38],12,"project\u002Fneutral\u002Fdocs",[184,246,38,222,185,38],13,[248,246,38,222,249,38],"6170262","txsl",[251,246,38,222,252,38],"6170590","matt_",[254,246,38,213,249,38],"6184518",[188,246,38,222,189,38],[257,246,38,213,249,38],"6184520",[64,259,44,227,65,38],14,[202,259,38,237,11,41],[117,262,33,217,118,38],15,[121,262,41,229,122,38],[265,266,44,267,268,38],"6172088",16,"project\u002Fpositive\u002Fnone","giis",[],[271,275,279,284,289,294],{"id":272,"name":273,"points":16,"category":274},"6159835","Distributed Homomorphic Encryption Adder","security_privacy",{"id":276,"name":277,"points":206,"category":278},"6146665","google-drive-ocamlfuse","infrastructure",{"id":280,"name":281,"points":282,"category":283},"6148137","Rails Performance Help",68,"dev_tools",{"id":285,"name":286,"points":287,"category":288},"6161236","Temper",53,"web_saas",{"id":290,"name":291,"points":292,"category":293},"6165913","adventureplaybook.com",47,"creative",{"id":295,"name":296,"points":297,"category":298},"6148672","Thyself.io",45,"productivity",false,"v2",{"id":302,"name":5,"line":6,"ai":299,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":303,"top":18,"kw":304,"maker":11,"domain":10,"tier":19,"attempts":38,"strip":305,"url":9,"mix":306,"praise":81,"objection":107,"sub":21},6169040,0.34,[24,25,26,27],"30333300051555055300000050315",[31,32,33,34],1793990896873]