PythonでStackOverflowのAPIを叩く

表題の件ですが、大した事は無いのですがバージョンが変わってちょっと調べるのに手間がかかったので書いておきます。正確にはStackOverflow単独のAPIは無くてStackExchangeのAPIです。ちなみに先ほどの記事はStackOverflowのAPIを弄っていて見つけました。

ここではPy-StackExchangeモジュールを使用します。Stack.PYというモジュールもありますが、ちょっと機能が足りてない雰囲気でした。

$ pip install py-stackexchange

コードは以下のような感じです。

from stackexchange import Site, StackOverflow

so = Site(StackOverflow)
for q in so.search(order='desc',
                   sort='votes',
                   tagged='python',
                   pagesize=10)[:10]:
    print '{0:>8}{1:>6}  {2}'.format(q.id, q.score,q.title)

APIドキュメントがかなり親切なので、使用可能なAPIやパラメータはドキュメントを参照します。なおコメントの投稿等、書き込みが必要な場合はこのページからアプリケーション登録を行う必要があります。

上のサンプルだとStackOverflowをターゲットにしていますが、StackEchangeのサイトは沢山あります。下記で一覧っぽいリストを取得してみました。

>> import stackexchange
>> dir(stackexchange.sites)
['AndroidEnthusiasts',
 'AndroidEnthusiastsMeta',
 'Apple',
 'AppleMeta',
 'AskUbuntu',
 'AskUbuntuMeta',
 'Astronomy',
 'AstronomyMeta',
 'AudioRecordingandProduction',
 'AudioRecordingandProductionMeta',
 'Bicycles',
 'BicyclesMeta',
 'BoardandCardGames',
 'BoardandCardGamesMeta',
 'CodeGolf',
 'CodeGolfMeta',
 'CodeReview',
 'CodeReviewMeta',
 'Cooking',
 'CookingMeta',
 'DatabaseAdministrators',
 'DatabaseAdministratorsMeta',
 'DrupalAnswers',
 'DrupalAnswersMeta',
 'ElectricalEngineering',
 'ElectricalEngineeringMeta',
 'EnglishLanguageandUsage',
 'EnglishLanguageandUsageMeta',
 'FitnessandNutrition',
 'FitnessandNutritionMeta',
 'GIS',
 'GISMeta',
 'GameDevelopment',
 'GameDevelopmentMeta',
 'Gaming',
 'GamingMeta',
 'GardeningandLandscaping',
 'GardeningandLandscapingMeta',
 'GermanLanguageandUsage',
 'GermanLanguageandUsageMeta',
 'GraphicDesign',
 'GraphicDesignMeta',
 'HomeImprovement',
 'HomeImprovementMeta',
 'Homebrew',
 'HomebrewMeta',
 'ITSecurity',
 'ITSecurityMeta',
 'JapaneseLanguageandUsage',
 'JapaneseLanguageandUsageMeta',
 'JewishLifeandLearning',
 'JewishLifeandLearningMeta',
 'Mathematics',
 'MathematicsMeta',
 'MetaServerFault',
 'MetaStackOverflow',
 'MetaSuperUser',
 'MotorVehicleMaintenanceandRepair',
 'MotorVehicleMaintenanceandRepairMeta',
 'MusicalPracticeandPerformance',
 'MusicalPracticeandPerformanceMeta',
 'OnStartups',
 'OnStartupsMeta',
 'Parenting',
 'ParentingMeta',
 'PersonalFinanceandMoney',
 'PersonalFinanceandMoneyMeta',
 'PersonalProductivity',
 'PersonalProductivityMeta',
 'Philosophy',
 'PhilosophyMeta',
 'Photography',
 'PhotographyMeta',
 'Physics',
 'PhysicsMeta',
 'Programmers',
 'ProgrammersMeta',
 'ProjectManagement',
 'ProjectManagementMeta',
 'QuantitativeFinance',
 'QuantitativeFinanceMeta',
 'RoleplayingGames',
 'RoleplayingGamesMeta',
 'ScienceFictionandFantasy',
 'ScienceFictionandFantasyMeta',
 'ServerFault',
 'SharePoint',
 'SharePointMeta',
 'Skeptics',
 'SkepticsMeta',
 'SoftwareQualityAssuranceandTesting',
 'SoftwareQualityAssuranceandTestingMeta',
 'StackApps',
 'StackOverflow',
 'StatisticalAnalysis',
 'StatisticalAnalysisMeta',
 'SuperUser',
 'TeXLaTeX',
 'TeXLaTeXMeta',
 'TheoreticalComputerScience',
 'TheoreticalComputerScienceMeta',
 'Travel',
 'TravelMeta',
 'UnixandLinux',
 'UnixandLinuxMeta',
 'UserExperience',
 'UserExperienceMeta',
 'WebApplications',
 'WebApplicationsMeta',
 'Webmasters',
 'WebmastersMeta',
 'WordPress',
 'WordPressMeta',
 'Writers',
 'WritersMeta',
 '__SEAPI',
 '__builtins__',
 '__doc__',
 '__file__',
 '__name__',
 '__package__',
 'stackexchange']

以上です。気が向いたらこのAPI使ってミニミニサイトを作ってみようと思います。

Leave a Reply

Your email address will not be published. Required fields are marked *