tfilmprice - filmtools - various tools for photographic film development and darkroom printing
 (HTM) git clone git://src.adamsgaard.dk/filmtools
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
       tfilmprice (4128B)
       ---
            1 #!/bin/sh
            2 # get current film prices from fotoimpex and return price per roll
            3 
            4 rolls_per_bulk_roll=19
            5 
            6 die() {
            7         printf '%s: error: %s\n' "${0##*/}" "$1" >&2
            8         exit 1
            9 }
           10 
           11 # 1: product string, 2: format
           12 fotoimpex_path() {
           13         case "$2" in
           14                 120)
           15                         case "$1" in
           16                                 kodak-portra-400|fuji-pro-400-h)
           17                                         printf '%s-120-medium-format-film-single-roll.html' "$1";;
           18                                 *)
           19                                         printf '%s-120-medium-format-film.html' "$1";;
           20                         esac;;
           21                 135)
           22                         case "$1" in
           23                                 adox-chs-100-ii)
           24                                         printf '%s-35mm-film-13536.html' "$1";;
           25                                 adox-cms-20-ii)
           26                                         printf '%s-13536-35mm-36-exposure.html' "$1";;
           27                                 adox-hr-50)
           28                                         printf '%s-13536-with-speed-boost.html' "$1";;
           29                                 adox-silvermax)
           30                                         printf '%s-bw-film-with-high-silver-content.html' "$1";;
           31                                 ilford-pan-f)
           32                                         printf '%s-13536-50-asa.html' "$1";;
           33                                 ilford-fp4)
           34                                         printf '%s-125-asa-13536.html' "$1";;
           35                                 ilford-hp5)
           36                                         printf '%s-13536-400-asa.html' "$1";;
           37                                 fuji-fujicolor-c200)
           38                                         printf '%s-135-36-single-pack.html' "$1";;
           39                                 kodak-t-max-p3200)
           40                                         printf '%s-tmz-35-mm-film.html' "$1";;
           41                                 kodak-portra-400|rollei*)
           42                                         printf '%s-135-36.html' "$1";;
           43                                 kodak-ektar-100)
           44                                         printf '%s-35mm-film-13536.html' "$1";;
           45                                 *)
           46                                         printf '%s-13536.html' "$1";;
           47                         esac;;
           48                 30.5m)
           49                         case "$1" in
           50                                 ilford-delta-400)
           51                                         printf '%s-kb-305m-bulk-roll.html' "$1";;
           52                                 ilford-fp4|ilford-hp5)
           53                                         printf '%s-13536-bulk-roll-305m.html' "$1";;
           54                                 kodak*)
           55                                         printf '%s-305m-bulk-film.html' "$1";;
           56                                 rollei-rpx-400)
           57                                         printf '%s-35mm-305m-bulk-roll.html' "$1";;
           58                                 *)
           59                                         printf '%s-305m-bulk-roll.html' "$1";;
           60                         esac;;
           61                 4x5)
           62                         printf '%s-102x127-cm-4x5-inch-25-sheets.html' "$1";;
           63                 *)
           64                         die "unknown film format '$2'"
           65         esac
           66 }
           67 
           68 # 1: product string, 2: format
           69 fotoimpex_url() {
           70         printf 'https://www.fotoimpex.com/films/%s\n' "$(fotoimpex_path "$1" "$2")"
           71 }
           72 
           73 macodirect_url() {
           74         printf 'https://www.macodirect.de/en/film/%s\n' "$(fotoimpex_path "$1" "$2")"
           75 }
           76 
           77 fotoimpex_extract_price() {
           78         if grep -qE 'From  *10' "$1"; then
           79                 if grep -qE 'From  *5' "$1"; then
           80                         n=6
           81                 else
           82                         n=4
           83                 fi
           84         else
           85                 n=2
           86         fi
           87         price="$(grep EUR "$1" | head -$n | tail -1 | \
           88                 sed 's,.*<b>,,
           89                      s#,#.#g
           90                          s,&nbsp;, ,g
           91                          s,</b>.*,,
           92                          s, *EUR,,')"
           93         if [ ! -z "$price" ]; then
           94                 if [ "$2" = "30.5m" ]; then
           95                         printf '%.2f' \
           96                                 "$(echo "${price}"/"${rolls_per_bulk_roll}" | bc -l)"
           97                 else
           98                         printf '%s' "$price"
           99                 fi
          100         else
          101                 printf -- '--\t--'
          102         fi
          103 }
          104 
          105 get_html() {
          106         if command -v hurl >/dev/null 2>&1; then
          107                 hurl "$1" 2>/dev/null
          108         elif command -v curl >/dev/null 2>&1; then
          109                 curl -s "$1" 2>/dev/null
          110         else
          111                 die 'no suitable html fetcher found'
          112         fi
          113         sleep 1
          114         if [ $? -ne 0 ]; then
          115                 return 1
          116         fi
          117 }
          118 
          119 eur_to_dkk() {
          120         printf '%.2f' "$(printf '%s*7.46\n' "$1" | bc -l)"
          121 }
          122 
          123 fotoimpex() {
          124         out="fotoimpex_${1}_${2}.html"
          125         url="$(fotoimpex_url "$1" "$2")"
          126         if [ ! -e "$out" ]; then
          127                 if ! get_html "$url" > "$out"; then
          128                         rm -f "$out"
          129                 fi
          130         fi
          131         if [ -e "$out" ]; then
          132                 price="$(fotoimpex_extract_price "$out" "$2")"
          133                 if [ ! "$price" = "--        --" ]; then
          134                         printf '%-24s\t%s\t' "$1" "$2"
          135                         printf '%s\tEUR\t' "$price"
          136                         printf '%s\tDKK\t' "$(eur_to_dkk "$price")"
          137                         printf '%s\n' "$url"
          138                 fi
          139         fi
          140 }
          141 
          142 macodirect() {
          143         out="macodirect_${1}_${2}.html"
          144         url="$(macodirect_url "$1" "$2")"
          145         if [ ! -e "$out" ]; then
          146                 if ! get_html "$url" > "$out"; then
          147                         rm -f "$out"
          148                 fi
          149         fi
          150 #        if [ -e "$out" ]; then
          151 #                price="$(macodirect_extract_price "$out" "$2")"
          152 #                if [ ! "$price" = "--        --" ]; then
          153 #                        printf '%-24s\t%s\t' "$1" "$2"
          154 #                        printf '%s\tEUR\t' "$price"
          155 #                        printf '%s\tDKK\t' "$(eur_to_dkk "$price")"
          156 #                        printf '%s\n' "$url"
          157 #                fi
          158 #        fi
          159 }
          160 
          161 
          162 film_products="adox-chs-100-ii
          163 adox-cms-20-ii
          164 adox-hr-50
          165 adox-silvermax
          166 ilford-delta-100
          167 ilford-delta-400
          168 ilford-pan-f
          169 ilford-fp4
          170 ilford-hp5
          171 fuji-neopan-acros-ii-neu-100
          172 fuji-fujicolor-c200
          173 fuji-pro-400-h
          174 kodak-t-max-100
          175 kodak-t-max-400
          176 kodak-t-max-p3200
          177 kodak-tri-x-400
          178 kodak-ektar-100
          179 kodak-portra-160
          180 kodak-portra-400
          181 kodak-portra-800
          182 rollei-rpx-25
          183 rollei-rpx-100
          184 rollei-rpx-400"
          185 
          186 film_formats="135
          187 30.5m
          188 120
          189 4x5"
          190 
          191 for p in $film_products; do
          192         for f in $film_formats; do
          193                 fotoimpex "$p" "$f"
          194                 macodirect "$p" "$f"
          195         done
          196 done