diff --git a/fixtures/www.oreilly.co.jp/1556577184695.html b/fixtures/www.oreilly.co.jp/1556577184695.html new file mode 100644 index 000000000..d1ea0bdc2 --- /dev/null +++ b/fixtures/www.oreilly.co.jp/1556577184695.html @@ -0,0 +1,479 @@ + + + + O'Reilly Japan - Head First はじめてのプログラミング + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ + +
+
+ + +

Head First はじめてのプログラミング
――頭とからだで覚えるPythonプログラミング入門

+ + + [cover photo] +
    + +
  • + 2019年04月 発行 +
  • +
  • 636ページ
  • +
  • ISBN978-4-87311-874-1
  • +
  • 原書: Head First Learn to Code
  • +
  • フォーマット 本 PDF
  • +

+
+
+ + + +
+ +
+ Ebook Storeで電子版を購入:
価格2,592円
+ + + +
+ +
+ +
+
+ +
+

脳の働きに注目し、脳を活性化させる学習効果の高い独自のスタイルで人気の高いHead Firstシリーズにプログラミング初心者向けバージョンが登場。Pythonを使ったプログラミングの基本について、イラストや写真を多用して直感的な理解を促します。やさしい切り口ながらも、データ型、データ構造、抽象化、再帰、モジュールなど、プログラミングの基本を段階的に学び、後半では複雑で大規模なアプリケーションの作成にも取り組みます。認知科学と教育心理学に基づいたアプローチで、プログラミングのテクニックだけではなく、論理的思考やプログラミング的な考え方を、楽しみながら身に付けられるように工夫されています。
+
+無料 お試し版

+ +

関連書籍

+ + + Head First Python 第2版
+ + Pythonチュートリアル 第3版
+ + 入門 Python 3
+ + +
+ +
+

はじめに
+
+1章 コンピュータ的に考える:始めよう
+    分解する
+    コーディングの手順
+    同じ言語で話している?
+    プログラミング言語の世界
+    Pythonを使ったコードの記述と実行
+    Pythonのざっくりした歴史
+    Pythonを試す
+    作業を保存する
+    おめでとう! 最初のPythonプログラムが書けました!
+    フレーズ・オ・マチック
+    コンピュータにコードを読ませる
+
+2章 単純な値、変数、型:値を知る
+    犬年齢計算機のコーディング
+    擬似コードからPythonのコードに変換する
+    手順1:入力してもらう
+    input 関数の動作
+    ユーザの入力を変数に代入する
+    手順2:さらに入力してもらう
+    そろそろコードを実行してみよう
+    コードの入力
+    変数をさらに詳しく学ぶ
+    式の追加
+    変数が「変」数と呼ばれる理由
+    演算子の優先順位をよく理解する
+    演算子の優先順位を使った計算
+    寄り道をする!
+    手順3:犬の年齢を計算する
+    ヒューストン、問題が発生した!
+    誤りは(人)コードの常
+    デバッグをもう少しだけ
+    Pythonの型とは?
+    コードの修正
+    ヒューストン、発射した!
+    手順4:ユーザフレンドリーな出力
+
+3章 ブール型、判定、ループ:判定コード
+    ゲームをしない?
+    まずは骨組みの設計
+    コンピュータの手
+    乱数の使い方
+    ブール型って?
+    判定する
+    判定、そしてまた判定
+    じゃんけんに戻る
+    ユーザの手を取得する
+    ユーザの手を調べる
+    あいこを判定するコードを追加する
+    誰が勝った?
+    ゲームロジックの実装
+    ブール演算子の詳細
+    説明を入れる
+    コードにコメントを追加する
+    ゲームを完成させる!
+    ユーザの手が無効かどうかをどのように判断する?
+    ユーザに尋ね続ける方法
+    何度も行う
+    while ループの動作
+    whileを使って有効な手を選ぶまでユーザに尋ねる方法
+    初めてのゲームのコードが書けました。おめでとう!
+
+4章 リストと反復:構造を用意する
+    バブルザらス社を助けられる?
+    Pythonで複数の値を表現する方法
+    リストの動作
+    ところで、そのリストの大きさって?
+    リストの末尾の要素にアクセスする
+    Pythonではずっと簡単
+    負のインデックスを使う
+    一方、バブルザらス社では
+    リストを反復処理する
+    出力の問題を修正する
+    出力の問題を実際に修正する
+    for ループ、それはリストの反復処理に最適な方法
+    数値の範囲に対するforループの動作
+    範囲をもっと使う
+    すべてをまとめる
+    ゼロからリストを作成する
+    リストをさらに使う
+    最終レポートの試運転
+    最高スコアの溶液は?
+    最も費用対効果の高い溶液はどれ?
+
+5章 関数と抽象化:関数にする
+    このコードのどこがいけないの?
+    コードブロックを関数に変換する
+    関数が作成できました。さてどう使う?
+    実際にはどのように機能しているの?
+    関数は結果を返すこともできる
+    戻り値のある関数を呼び出す
+    少しだけリファクタリングしてみる
+    コードの実行
+    アバターコードの抽象化方法
+    get_attribute 関数の本体を書く
+    get_attribute を呼び出す
+    変数についてもう少しお話しします
+    変数スコープを理解する
+    変数が関数に渡されるとき
+    drink_me関数を呼び出す
+    関数でグローバル変数を使うということ
+    パラメータを深く理解する:デフォルト値とキーワード
+    デフォルトパラメータ値の使い方
+    必ず必須パラメータを最初に指定する!
+    キーワード引数を使う
+    キーワード引数とデフォルト値について
+
+おまけの章 ソートと入れ子の反復:データを整理する
+    バブルソートを理解する
+    走査1から始める
+    バブルソートの擬似コード
+    Pythonでバブルソートを実装する
+    溶液番号を割り出す
+
+6章 テキスト、文字列、ヒューリスティック:すべてを組み合わせる
+    データサイエンスにようこそ
+    読みやすさはどのように計算する?
+    実行計画
+    擬似コードを書く
+    分析するテキストが必要
+    関数を用意する
+    優先事項:テキスト内の単語の総数が必要
+    文の総数を求める
+    関数count_sentencesを書く
+    音節の数を求める。つまり、ヒューリスティックを好きになる
+    ヒューリスティックの作成
+    ヒューリスティックを書く
+    母音をカウントする
+    連続する母音を無視する
+    連続する母音を無視するコードを書く
+    末尾のe、y、句読記号を取り除く
+    スライス(部分文字列)を利用する
+    ヒューリスティックコードを完成させる
+    読みやすさ公式の実装
+    さらに進める
+
+7章 モジュール、メソッド、クラス、オブジェクト:モジュール化する
+    簡単なモジュールの復習
+    グローバル変数__name__
+    オフィスにおける会話の続き
+    analyze.py をモジュールとして使う
+    analyze.py にdocstringを追加する
+    他のPythonモジュールを調べる
+    待って、誰か「タートル」って言った?!
+    自分だけのタートルを作成する
+    タートル研究所
+    2つ目のタートルを追加する
+    ところで、タートルって?
+    オブジェクトって何者?
+    わかった。じゃあ、クラスって?
+    オブジェクトとクラスの使い方
+    メソッドと属性
+    クラスとオブジェクトはどこにでもある
+    タートルレースの準備をする
+    ゲームを設計する
+    コーディングを始めよう
+    ゲームの準備をする
+    セットアップコードを書く
+    落ち着いて!
+    レースを開始する
+
+8章 再帰と辞書:反復とインデックスを超えて
+    異なる計算方法
+    別の方法を考える
+    2つの場合のコードを書く
+    さらに練習しよう
+    再帰を使って回文を探し出す
+    再帰回文検出器を書く
+    アンチソーシャルネットワーク
+    辞書とは
+    辞書を作成する
+    キーと値は文字列でなくても大丈夫
+    もちろん、キーは削除できる
+    まず存在するかどうかを調べる
+    辞書の反復処理はどうなる?
+    アンチソーシャルネットワークで辞書を活用する
+    属性を追加するにはどうすればいい?
+    アンチソーシャルネットワークの目玉機能
+    最も非社交的なユーザを探す
+    関数呼び出しの結果を記憶しておける?
+    辞書を使ってフィボナッチ結果を記憶する
+    「メモ化」と呼ばれます
+    koch関数を詳しく調べる
+    コッホフラクタルを本格的に調べる
+
+9章 ファイルの保存と取得:永続性
+    クレイジーリブを始める準備はいい?
+    クレイジーリブの動作
+    手順1:ファイルから文章のテキストを読み込む
+    ファイルパスの使い方
+    絶対パス
+    終わったら後片付けを忘れずに!
+    ファイルをコードに読み込む
+    もう勘弁して
+    クレイジーリブゲームを完成させる!
+    最終行をどのように判断するの?
+    クレイジーリブのテンプレートを読み込む
+    テンプレートテキストを処理する
+    新たな文字列メソッドを使ってバグを修正する
+    実際にバグを修正する
+    本当に問題があるコードもある
+    例外処理
+    明示的に例外を処理する
+    例外を処理するようにクレイジーリブを更新する
+    最後の手順:クレイジーリブを保存する
+    残りのコードを更新する
+
+10章 Web API の利用:もっと外に目を向ける
+    Web APIを使って範囲を広げる
+    Web API の仕組み
+    すべてのWeb APIにはWebアドレスがある
+    簡単なアップグレードをする
+    アップグレードする
+    あとは優れたWeb APIが必要なだけ
+    API を詳しく調べる
+    Web API はJSONを使ってデータを返す
+    リクエストモジュールをもう一度詳しく
+    全体をまとめる:Open Notifyにリクエストする
+    JSONの使い方
+    ISSデータにJSONモジュールを使う
+    グラフィックスを加える
+    Screenオブジェクトを使う
+    タートルを追加してISSを描画
+    タートルは宇宙ステーションのようにも見える
+    ISSを忘れる−どこにいるの?
+    ISSのコードを仕上げる
+
+11章 ウィジェット、イベント、創発的な振る舞い:インタラクティブにする
+    人工生命の不思議な世界へようこそ
+    ライフゲームを詳しく調べる
+    作成するもの
+    設計は適切ですか?
+    データモデルの作成
+    グリッドを表す
+    ライフゲームの世代を計算する
+    セルの運命を計算する
+    モデルのコードを完成させる
+    ビューの作成
+    最初のウィジェットを作成する
+    残りのウィジェットを追加する
+    レイアウトを修正する
+    グリッドレイアウトにウィジェットを配置する
+    グリッドレイアウトをコードに変換する
+    コントローラの作成
+    update 関数の追加
+    新しい計算方式に取り組む
+    開始/ 一時停止ボタンの動作
+    別の種類のイベント
+    一定間隔で何度も呼び出す方法:afterメソッド
+    セルを直接入力する、そして編集する
+    grid_viewのハンドラを書く
+    パターンを追加する
+    オプションメニューのハンドラを書く
+    パターンローダを書く
+    ライフゲームシミュレータをさらに進化させる!
+
+12章 オブジェクト指向プログラミング:オブジェクト村への旅
+    別の方法で分割する
+    要するにオブジェクト指向プログラミングって?
+    クラスを設計する
+    最初のクラスを書く
+    コンストラクタの動作
+    barkメソッドを書く
+    メソッドの動作
+    継承する
+    ServiceDog クラスの実装
+    サブクラスとは
+    ServiceDog はDog である(IS-A)
+    IS-A関係を調べる
+    振る舞いのオーバーライドと拡張
+    専門用語の街へようこそ
+    オブジェクトは別のオブジェクトを含む(HAS-A)
+    犬用ホテルの設計
+    犬用ホテルの実装
+    ホテルでのアクティビティを追加する
+    可能なことは何でもできる(ポリモーフィズム)
+    他の犬に歩き方を教える
+    継承の威力(と役割)
+
+付録 未収録事項:(取り上げなかった)上位10 個のトピック
+    1. リスト内包表記 
+    2. 日付と時刻
+    3. 正規表現
+    4. その他のデータ型:タプル
+    5. その他のデータ型:集合
+    6. サーバサイドプログラミング
+    7. 遅延評価
+    8. デコレータ
+    9. 高階関数と第一級関数
+    10. 多数のライブラリ
+
+索引

+
+ + + + +
+ +
+ +
+
+ +
+
+

Feedback

+

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]

+
+ +
+ + +
+ + + + + + + + + diff --git a/src/extractors/custom/index.js b/src/extractors/custom/index.js index 8758cef71..ea9cf8a31 100644 --- a/src/extractors/custom/index.js +++ b/src/extractors/custom/index.js @@ -119,3 +119,4 @@ export * from './www.gizmodo.jp'; export * from './getnews.jp'; export * from './www.lifehacker.jp'; export * from './sect.iij.ad.jp'; +export * from './www.oreilly.co.jp'; diff --git a/src/extractors/custom/www.oreilly.co.jp/index.js b/src/extractors/custom/www.oreilly.co.jp/index.js new file mode 100644 index 000000000..48a020341 --- /dev/null +++ b/src/extractors/custom/www.oreilly.co.jp/index.js @@ -0,0 +1,32 @@ +export const WwwOreillyCoJpExtractor = { + domain: 'www.oreilly.co.jp', + + title: { + selectors: ['h3'], + }, + + author: { + selectors: ['li[itemprop="author"]'], + }, + + date_published: { + selectors: [['meta[itemprop="datePublished"]', 'value']], + timezone: 'Asia/Tokyo', + }, + + dek: null, + + lead_image_url: { + selectors: [['meta[name="og:image"]', 'value']], + }, + + content: { + selectors: ['#content'], + + defaultCleaner: false, + + transforms: {}, + + clean: ['.social-tools'], + }, +}; diff --git a/src/extractors/custom/www.oreilly.co.jp/index.test.js b/src/extractors/custom/www.oreilly.co.jp/index.test.js new file mode 100644 index 000000000..ff47087b1 --- /dev/null +++ b/src/extractors/custom/www.oreilly.co.jp/index.test.js @@ -0,0 +1,114 @@ +import assert from 'assert'; +import URL from 'url'; +import cheerio from 'cheerio'; + +import Mercury from 'mercury'; +import getExtractor from 'extractors/get-extractor'; +import { excerptContent } from 'utils/text'; + +const fs = require('fs'); + +describe('WwwOreillyCoJpExtractor', () => { + describe('initial test case', () => { + let result; + let url; + beforeAll(() => { + url = 'https://www.oreilly.co.jp/books/9784873118741/'; + const html = fs.readFileSync( + './fixtures/www.oreilly.co.jp/1556577184695.html' + ); + result = Mercury.parse(url, { + html, + fallback: false, + }); + }); + + it('is selected properly', () => { + // This test should be passing by default. + // It sanity checks that the correct parser + // is being selected for URLs from this domain + const extractor = getExtractor(url); + assert.equal(extractor.domain, URL.parse(url).hostname); + }); + + it('returns the title', async () => { + // To pass this test, fill out the title selector + // in ./src/extractors/custom/www.oreilly.co.jp/index.js. + const { title } = await result; + + // Update these values with the expected values from + // the article. + assert.equal( + title, + `Head First はじめてのプログラミング――頭とからだで覚えるPythonプログラミング入門` + ); + }); + + it('returns the author', async () => { + // To pass this test, fill out the author selector + // in ./src/extractors/custom/www.oreilly.co.jp/index.js. + const { author } = await result; + + // Update these values with the expected values from + // the article. + assert.equal(author, 'Eric Freeman 著、嶋田 健志 監訳、木下 哲也 訳'); + }); + + it('returns the date_published', async () => { + // To pass this test, fill out the date_published selector + // in ./src/extractors/custom/www.oreilly.co.jp/index.js. + const { date_published } = await result; + + // Update these values with the expected values from + // the article. + assert.equal(date_published, '2019-04-25T15:00:00.000Z'); + }); + + it('returns the dek', async () => { + // To pass this test, fill out the dek selector + // in ./src/extractors/custom/www.oreilly.co.jp/index.js. + const { dek } = await result; + + // Update these values with the expected values from + // the article. + assert.equal(dek, null); + }); + + it('returns the lead_image_url', async () => { + // To pass this test, fill out the lead_image_url selector + // in ./src/extractors/custom/www.oreilly.co.jp/index.js. + const { lead_image_url } = await result; + + // Update these values with the expected values from + // the article. + assert.equal( + lead_image_url, + `https://www.oreilly.co.jp/books/images/picture_large978-4-87311-874-1.jpeg` + ); + }); + + it('returns the content', async () => { + // To pass this test, fill out the content selector + // in ./src/extractors/custom/www.oreilly.co.jp/index.js. + // You may also want to make use of the clean and transform + // options. + const { content } = await result; + + const $ = cheerio.load(content || ''); + + const first13 = excerptContent( + $('*') + .first() + .text(), + 8 + ); + + // Update these values with the expected values from + // the article. + assert.equal( + first13, + 'Eric Freeman 著、嶋田 健志 監訳、木下 哲也 訳 2019年04月' + ); + }); + }); +});