Как сделать тоже самое на PHP?
`API_URL = "https://api.similarweb.com/v1/website/{site}/" \
"total-traffic-and-engagement/visits?api_key={api_key}" \
"&start_date={start_date}" \
"&end_date={end_date}" \
"&main_domain_only=false" \
"&granularity={granularity}".format(
site='cnn.com',
api_key=MY_API_KEY,
start_date="2017-09",
end_date="2017-10",
granularity="monthly"
)`
Ответ
Ну, как вариант с помощью eval
$string = 'API_URL = "https://api.similarweb.com/v1/website/{site}/" \
"total-traffic-and-engagement/visits?api_key={api_key}" \
"&start_date={start_date}" \
"&end_date={end_date}" \
"&main_domain_only=false" \
"&granularity={granularity}".format(
site="cnn.com",
api_key=MY_API_KEY,
start_date="2017-09",
end_date="2017-10",
granularity="monthly"
)';
$site = 'test.ru';
$api_key = 'superkey';
$start_date = 'ONE';
$end_date = 'TWO';
$granularity = 'variable';
preg_match_all('#\{(.*?)\}#', $string, $matches, PREG_SET_ORDER);
foreach ($matches as $m) {
eval('$string = str_replace($m[0], $'.$m[1].', $string);');
}
echo $string;
В результате данные в формате {параметр} заменяются на значение переменной $параметр
В итоге получаем такую строку:
API_URL = "https://api.similarweb.com/v1/website/test.ru/" \
"total-traffic-and-engagement/visits?api_key=superkey" \
"&start_date=ONE" \
"&end_date=TWO" \
"&main_domain_only=false" \
"&granularity=variable".format(
site="cnn.com",
api_key=MY_API_KEY,
start_date="2017-09",
end_date="2017-10",
granularity="monthly"
)
UPD: Решение чуть попроще:
$string = str_replace('"', '\"', preg_replace('#\{(.*?)\}#i', '\$$1', $string));
eval('$string = "'.$string.'";');
echo $string;
Или вместо функции str_replace возьмем addcslashes для экранирования кавычек:
eval('$string = "'.addcslashes(preg_replace('~\{(.*?)\}~i', '\$$1', $string), '"').'";');
echo $string;